4

我基本上有这段代码来拦截某些QTreeWidget事件。

MyWidget :: MyWidget ()
{
     m_tree = new QTreeWidget ();
     // ...
     m_tree -> installEventFilter (this);
}

bool MyWidget :: eventFilter (QObject * obj, QEvent * e)
{
    if (m_tree != obj)
        return QWidget :: eventFilter (obj, e);

    qDebug () << e -> type ();

    switch (e -> type ())
    {
        case QEvent :: MouseButtonPress:
        case QEvent :: MouseButtonRelease:
        case QEvent :: MouseMove:
        case QEvent :: Leave:
            qDebug () << "GOT EM";
            break;
    };

    // ...
 }

当我在 中单击并移动时QTreeWidget,事件处理程序会打印出e->type()许多事件,但不会打印鼠标事件。鼠标事件似乎永远不会发生(除了Leave)。

为什么会这样?如果至少有一个按钮被按下,即使鼠标跟踪关闭,我也应该得到移动事件,无论如何我都应该得到按下和释放事件。本身行为正常,QTreeWidget就好像没有安装事件处理程序一样。

4

0 回答 0