我基本上有这段代码来拦截某些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
就好像没有安装事件处理程序一样。