我需要将一些简单的过滤器功能连接到鼠标单击 QTreeView 标题项。很简单,我实现了一个插槽函数,它连接到:
QTreeView::header()->sectionClicked(int)
设置后
QTreeView::header()->setSectionsClickable(true)
,sectionClicked
每当我单击任何可点击标题都会产生的默认悬停效果突出显示的标题时都会发出。
问题是,将无法识别悬停在可点击标题中的某些区域上。因此,在这些部分没有亮点,我不会得到任何sectionClicked
触发器。我进一步追溯它并从中派生出我自己的类QHeaderView
并将一些输出放入mouseMoveEvent
.
class MyHeaderView : public QHeaderView
{
Q_OBJECT
public:
MyHeaderView(QWidget* parent = 0)
: QHeaderView(Qt::Horizontal, parent)
{
setMouseTracking(true);
}
protected:
virtual void mouseMoveEvent(QMouseEvent* event)
{
qDebug() << event->pos();
}
};
在保留所有QTreeView
设置不变的同时,我将此类的一个实例设置为通过
QTreeView::setHeader(QHeaderView*)
我可以看到,在所有区域中,悬停效果都失败了,我没有得到你可以在覆盖的mouseMoveEvent
.
因此,我假设鼠标跟踪无法正常工作。
我正在处理的整个应用程序非常庞大,因此我为所有这些设置了一个独立的示例。令我惊讶的是,一切都按预期进行。我无能为力,我应该如何处理。谁能想到鼠标跟踪在小部件的某些部分失败的原因?这可能是与性能不足有关的帧速率问题吗?小部件上是否有影响整个鼠标跟踪区域的设置?父小部件会影响鼠标跟踪吗?