C++ 为什么不是';我的Qt eventFilter无法拾取鼠标事件吗?
我基本上有这个代码来截获某些C++ 为什么不是';我的Qt eventFilter无法拾取鼠标事件吗?,c++,qt,qtreewidget,qt-events,C++,Qt,Qtreewidget,Qt Events,我基本上有这个代码来截获某些QTreeWidget事件 MyWidget :: MyWidget () { m_tree = new QTreeWidget (); // ... m_tree -> installEventFilter (this); } bool MyWidget :: eventFilter (QObject * obj, QEvent * e) { if (m_tree != obj) return QWidg
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;
};
// ...
}
MyWidget::MyWidget()
{
m_tree=newqtreewidget();
// ...
m_tree->installEventFilter(此);
}
bool MyWidget::eventFilter(QObject*obj,QEvent*e)
{
if(m_树!=obj)
返回QWidget::eventFilter(obj,e);
qDebug()类型();
开关(e->type())
{
案例QEvent::鼠标按钮按下:
案例QEvent::鼠标按钮释放:
案例QEvent::MouseMove:
案例QEvent::离开:
qDebug()type()
用于许多事件,但不用于鼠标事件。鼠标事件似乎永远不会发生(除了离开
)
为什么会发生这种情况?如果至少有一个按钮被按下,我应该在鼠标跟踪关闭的情况下获取移动事件,并且不管怎样,我都应该获取按下和释放事件。
QTreeWidget
本身行为正常,就好像没有安装事件处理程序一样。事件不会发生在QTreeView上,而是发生在视口上。改为在QTreeView::viewport()
上安装视口。或者,重写mousePressEvent
、mouseReleaseEvent
等(因为所有这些都不需要QTreeView的事件筛选器)。很抱歉,我应该指定:鼠标单击事件不会发生在QTreeView上,而是发生在视口上。大多数其他事件都发生在QTreeView上。@AlexanderHuszagh详细说明:即使事件发生在视口上,MousePresseEvent
和朋友在为QTreeView
重写时也会捕获该事件,因为t已经在视口内部安装了一个事件过滤器(QAbstractScrollArea)。谢谢。想把它变成一个答案吗?当然,但我主要是用PySide(用于Qt的Python绑定)编写代码的,所以你介意代码是用Python/伪代码编写的吗?非常乐意提供帮助。