Qt - 捕捉通常由窗口管理器处理的事件

Posted

技术标签:

【中文标题】Qt - 捕捉通常由窗口管理器处理的事件【英文标题】:Qt - Catch events normally handled by the Window Manager 【发布时间】:2011-06-13 21:40:29 【问题描述】:

我不太清楚如何简洁地表达这个问题,所以如果有类似的问题,请指出正确的方向并关闭这个问题。

我目前正在构建一个 CAD 应用程序,用户主要通过鼠标和三个键盘修饰符(alt、shift、ctrl)在 3D 视口中进行交互。 Shift 和 Control 修改当前选择的工具选项,而 alt 操作相机 - 就像任何其他 3D CAD 应用程序一样。

但是我目前正在使用 Gnome 桌面进行开发,它的窗口管理器 (AFAIK) 会捕获任何 Alt-RightButton 鼠标拖动事件并将它们解释为窗口拖动命令 - 即使不按住标题栏并且无论当前突出显示的小部件。

这对我来说是一场灾难,因为相机键盘控制在我的目标行业中非常标准化。那么有没有人知道一种方法来覆盖这种行为,最好是在 Qt 中,并且最好将它集中在一个特定的小部件类中的一个场景中?

谢谢你, 凸轮

【问题讨论】:

不只是你。 Inkscape 有一个 FAQ 项目,这对于基于应用程序的解决方案来说并不是一个好兆头。 wiki.inkscape.org/wiki/index.php/… 【参考方案1】:

如果您在窗口上使用 Qt::X11BypassWindowManagerHint,则窗口管理器无法窃取您的按键。但是,这意味着您会丢失原生窗口框架(包括装饰、移动和调整大小),因此很可能您不想这样做

另一种方式:如果您的用户仅使用 1 或 2 种 Linux,请在安装程序中添加一些内容,询问用户是否要操作 gnome(或其他)键设置,如果是,请通过 gconftool 更改它们- 2(或同等学历)。

【讨论】:

以上是关于Qt - 捕捉通常由窗口管理器处理的事件的主要内容,如果未能解决你的问题,请参考以下文章

Qt之自定义布局管理器(QFlowLayout)

Qt - 在窗口上安装布局管理器

我应该如何在 Qt 中编写窗口管理器?

QT开发(二十一)——QT布局管理器

Qt布局管理器(详解)

Qt之自定义布局管理器(QCardLayout)