1

这是我在应用程序中遇到的一个有趣问题。我有一个小部件(“B”),它是双击的目标。在该小部件之上,我有时必须显示一个浮动工具栏小部件(“A”。该浮动工具栏是一个 Qt::Popup 窗口,因为我希望在其外部单击以使其消失并满足其他渲染要求。

在此处输入图像描述

问题:

如果显示浮动工具栏,当我双击小部件“B”上的一个区域(小部件“A”的外侧)时,第一次单击被弹出窗口“吞下”,并且小部件“B”没有双击事件。这会导致用户无法双击正常工作的用户体验问题。

当弹出窗口处于活动状态时,是否有任何方法可以拦截鼠标单击,如果在弹出窗口之外单击,则将其“路由”到小部件“B”中以供考虑,以便第二次单击将被视为“双击”?

谢谢。

4

3 回答 3

0

尝试将鼠标跟踪设置true为 A 和 B。似乎 B 就足够了。

于 2013-10-09T16:43:24.733 回答
0

您可以构建一个非常不愉快的 hack 来解决它:

1)让弹出窗口实现鼠标单击事件方法 2)查看事件中的 x,y 位置,确定该点是否在弹出窗口的边界内 3)如果不是,则使用QApplication::sendEvent()将其重定向到 B 小部件。

请注意,我不能肯定地说这会起作用,但理论上它应该会起作用。

于 2013-10-10T08:22:38.983 回答
0

我别无选择,只能停止使用 Qt::Popup 并且在我的情况下没有任何效果。

我的应用程序很复杂。问题是,由于我的应用程序在生活中的用途——第 3 方组件可以创建属于“B”小部件的子窗口。我无法控制他们的代码。当我使用 Qt::Popup 创建小部件“A”时,双击事件在 Windows 上失败。

在 Mac 上:“B”后代组件将获得双击事件,“A”Qt::Popup 将自动关闭。在 Windows 上:“A”Qt::popup 会自动关闭,但会吞下第一次单击,单击即可留下小部件“B”后代组件。当弹出窗口可见时,您不能双击它们。

鉴于这可能是操作系统限制或 Qt 错误,我停止使用 Qt::Popup 并移至 Qt::Tool - 这迫使我在自己的代码中进行自动关闭 - 但至少在 windows 和 Mac 上是双重的点击正确通过。

于 2013-10-14T17:04:47.753 回答