QHeaderView 鼠标跟踪失败
QHeaderView mouse tracking fails
我需要将一些简单的过滤器功能连接到鼠标单击 QTreeView header 项目。很简单,我实现了一个连接到的槽函数:
QTreeView::header()->sectionClicked(int)
设置后
QTreeView::header()->setSectionsClickable(true)
,sectionClicked
每当我点击任何可点击的 header 都会产生的默认悬停效果突出显示的 header 时发出。
问题是,将鼠标悬停在可点击的 header 中的某些区域上将无法识别。因此,在这些部分中没有亮点,我不会得到任何 sectionClicked
触发器。我进一步追溯并从 QHeaderView
派生出我自己的 class 并将一些输出放入 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
设置的同时,我通过
将此 class 的一个实例设置为 header
QTreeView::setHeader(QHeaderView*)
我可以看到,所有区域的悬停效果都失败了,我没有得到您可以在覆盖的 mouseMoveEvent
中看到的调试输出。
因此我假设鼠标跟踪无法正常工作。
我正在处理的整个应用程序非常大,所以我为所有这些设置了一个独立的示例。令我惊讶的是,一切都按预期进行。我一无所知,我应该如何处理这个问题。谁能想到鼠标跟踪在小部件的某些部分失败的原因?这可能是与性能不足有关的帧速率问题吗?小部件上是否有影响整个鼠标跟踪区域的设置? parent 小部件可以影响鼠标跟踪吗?
在我的应用程序中,我有一个控制器 class,它处理许多连接到树视图发出的各种信号的应用程序逻辑。 class 不支持渲染任何可视化。因此,从 QObject 派生将是最合理的选择。过了一会儿我注意到,它实际上是从 QWidget 派生的。作为一个 QWidget,我猜它试图呈现某种视觉表示,它覆盖了树视图。这就是为什么我在页眉的某些部分没有收到任何鼠标事件。
将我的控制器的基础 class 更改为 QObject 后,一切正常。
我需要将一些简单的过滤器功能连接到鼠标单击 QTreeView header 项目。很简单,我实现了一个连接到的槽函数:
QTreeView::header()->sectionClicked(int)
设置后
QTreeView::header()->setSectionsClickable(true)
,sectionClicked
每当我点击任何可点击的 header 都会产生的默认悬停效果突出显示的 header 时发出。
问题是,将鼠标悬停在可点击的 header 中的某些区域上将无法识别。因此,在这些部分中没有亮点,我不会得到任何 sectionClicked
触发器。我进一步追溯并从 QHeaderView
派生出我自己的 class 并将一些输出放入 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
中看到的调试输出。
因此我假设鼠标跟踪无法正常工作。
我正在处理的整个应用程序非常大,所以我为所有这些设置了一个独立的示例。令我惊讶的是,一切都按预期进行。我一无所知,我应该如何处理这个问题。谁能想到鼠标跟踪在小部件的某些部分失败的原因?这可能是与性能不足有关的帧速率问题吗?小部件上是否有影响整个鼠标跟踪区域的设置? parent 小部件可以影响鼠标跟踪吗?
在我的应用程序中,我有一个控制器 class,它处理许多连接到树视图发出的各种信号的应用程序逻辑。 class 不支持渲染任何可视化。因此,从 QObject 派生将是最合理的选择。过了一会儿我注意到,它实际上是从 QWidget 派生的。作为一个 QWidget,我猜它试图呈现某种视觉表示,它覆盖了树视图。这就是为什么我在页眉的某些部分没有收到任何鼠标事件。
将我的控制器的基础 class 更改为 QObject 后,一切正常。