这是我在申请中遇到的一个有趣问题。我有一个小部件(“B”),这是双击的目标。在这个小部件的顶部,我有时必须显示一个浮动工具栏小部件(“A”。那个浮动工具栏是一个Qt :: Popup窗口,因为我想在它之外点击它以使其消失并满足其他渲染要求。
问题:
如果显示浮动工具栏,当我双击窗口小部件“B”上的区域(窗口小部件“A”的外侧)时,第一次单击被弹出窗口“吞噬”,窗口小部件“B”获得没有双击事件。这会导致用户体验问题,用户无法双击即可正常工作。
当弹出窗口处于活动状态时,是否有任何方法可以拦截鼠标单击,如果在其外部单击,则将其“路由”到窗口小部件“B”中,以便将第二次单击视为“双击”?
感谢。
答案 0 :(得分:0)
尝试将A和B的鼠标跟踪设置为true
。似乎对于B就足够了。
答案 1 :(得分:0)
你可以建立一个非常不愉快的黑客来解决它:
1)让弹出窗口实现鼠标单击事件方法
2)查看事件中的x,y pos,确定该点是否在弹出窗口的边界内
3)如果没有,则使用QApplication::sendEvent()
将其重定向到B小部件。
注意我不能肯定地说它会起作用,但理论上应该这样。
答案 2 :(得分:0)
我别无选择,只能停止使用Qt :: Popup,在我的情况下没有任何效果。
我的应用很复杂。问题是,由于我的应用程序的生活目的 - 第三方组件可以创建窗口,这是“B”小部件的孩子。我无法控制他们的代码。当我使用Qt :: Popup创建小部件“A”时,双击事件在Windows上失败。
在Mac上:“B”后代组件将获得双击事件,“A”Qt :: Popup将自动关闭。 在Windows上:“A”Qt :: popup会自动关闭,但吞下第一次点击,只需单击即可保留小部件“B”后代组件。当弹出窗口可见时,您无法双击它们。
鉴于这可能是操作系统限制或Qt错误,我停止使用Qt :: Popup并转移到Qt :: Tool - 这迫使我在我自己的代码中进行自动关闭 - 但至少在Windows和Mac双击正确。