0

我需要将一些简单的过滤器功能连接到鼠标单击 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.

因此,我假设鼠标跟踪无法正常工作。

我正在处理的整个应用程序非常庞大,因此我为所有这些设置了一个独立的示例。令我惊讶的是,一切都按预期进行。我无能为力,我应该如何处理。谁能想到鼠标跟踪在小部件的某些部分失败的原因?这可能是与性能不足有关的帧速率问题吗?小部件上是否有影响整个鼠标跟踪区域的设置?父小部件会影响鼠标跟踪吗?

4

1 回答 1

0

在我的应用程序中,我有一个控制器类,它处理许多连接到树视图发出的各种信号的应用程序逻辑。此类不支持呈现任何可视化。因此,从 QObject 派生将是最合理的选择。过了一会儿,我注意到它实际上是从 QWidget 派生的。作为一个 QWidget 我猜它试图呈现某种视觉表示,它覆盖了树视图。这就是为什么我在标题的某些部分没有得到任何鼠标事件的原因。

将控制器的基类更改为 QObject 后,一切正常。

于 2016-01-21T17:15:29.477 回答