是否可以设置全局mouseReleaseEvent?
我的意思是我有QMainWindow,并在其上QFrame和init QListView和它
我有Widgets,它构成了QListView,在widget里面我有各种各样的标签和文本字段。
所以我想检测mouseRelease我的应用程序中的任何位置我必须在所有小部件中实现mouseReleaseEvent?
void ItemWidget::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
;
}
event->accept();
}
答案 0 :(得分:2)
根据QMouseEvent documentation,接收鼠标按下的小部件也将获得鼠标释放。因此,除了接收原始印刷机的小部件之外,您不必再查看鼠标释放。这通常被称为鼠标“抓住”。
您可能还想检查一个孩子是否设置了Qt::WA_NoMousePropagation
。如果已设置,它将确保您的鼠标事件不会冒泡。
如果您真的想要捕获所有鼠标释放事件,可以尝试在QApplication本身上安装event filter。这是一个重要的解决方案,但你应该得到每个鼠标释放事件。
答案 1 :(得分:1)
查看(稍微更旧)的文档here表示默认情况下,窗口小部件会忽略事件并将其传播到父项。因此,如果您将所有小部件设置为主应用程序窗口小部件(或“孙子”等)的子窗口,那么您只需要在应用程序窗口小部件上安装事件处理程序。