问:当我有一堆小部件时,如何设置全局mouseReleaseEvent

Qt how to set global mouseReleaseEvent when i have pile of widgets

本文关键字:mouseReleaseEvent 何设置 设置 全局 一堆 小部      更新时间:2023-10-16

是否需要设置全局mouseReleaseEvent
我的意思是我有QMainWindow,上面有QFrame和init QListView我有一个保持QListView的小部件,在小部件中我有一些标签和文本字段。所以我想检测mouseRelease——在我的应用程序中,我必须在所有小部件中实现mouseReleaseEvent的任何位置?

void ItemWidget::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
         ;
    }
    event->accept();
}

根据QMouseEvent文档,接收鼠标按压的小部件也将获得鼠标释放。因此,除了收到原始按键的小部件之外,您不应该再进一步寻找鼠标释放。这通常被称为鼠标"抓取"

您可能还需要检查您的一个孩子是否未设置Qt::WA_NoMousePropagation。如果设置了它,它将确保鼠标事件不会冒泡。

如果你真的想捕捉所有的鼠标释放事件,你可以尝试在QApplication本身安装一个事件过滤器。这是一个有点繁重的解决方案,但您应该获得每个鼠标释放事件。

查看这里的(稍微旧一点的)文档表明,事件在默认情况下被小部件忽略,并传播到它们的父级。因此,如果您将所有小部件都作为主应用程序小部件的子部件(或"孙部件"等),那么您应该只需要在应用程序小组件上安装事件处理程序。

相关文章:
  • 没有找到相关文章