我基本上有这个代码来拦截某些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
本身表现正常,就像没有安装事件处理程序一样。