【问题标题】:QHeaderView mouse tracking failsQHeaderView 鼠标跟踪失败
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 2019-03-04
      • 1970-01-01
      相关资源
      最近更新 更多