问:当我有一堆小部件时,如何设置全局mouseReleaseEvent
Qt how to set global mouseReleaseEvent when i have pile of widgets
是否需要设置全局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本身安装一个事件过滤器。这是一个有点繁重的解决方案,但您应该获得每个鼠标释放事件。
查看这里的(稍微旧一点的)文档表明,事件在默认情况下被小部件忽略,并传播到它们的父级。因此,如果您将所有小部件都作为主应用程序小部件的子部件(或"孙部件"等),那么您应该只需要在应用程序小组件上安装事件处理程序。
相关文章:
- 没有找到相关文章