【发布时间】:2016-01-19 19:54:57
【问题描述】:
我需要将一些简单的过滤器功能连接到鼠标单击 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 中看到的调试输出。
因此,我假设鼠标跟踪无法正常工作。
我正在开发的整个应用程序非常庞大,因此我为所有这些设置了一个独立的示例。令我惊讶的是,一切都按预期进行。我无能为力,我应该如何处理。谁能想到鼠标跟踪在小部件的某些部分失败的原因?这可能是与性能不足有关的帧速率问题吗?小部件上是否有影响整个鼠标跟踪区域的设置?父小部件会影响鼠标跟踪吗?
【问题讨论】:
标签: qt mousemove qheaderview qmouseevent