【问题标题】:Detect control buttons position at window title bar with Qt (on X11)使用 Qt 检测窗口标题栏上的控制按钮位置(在 X11 上)
【发布时间】:2017-07-30 21:57:30
【问题描述】:

某些 DE(在 Unity 或 OSX 上)将控制按钮(最小化、最大化、关闭)放在标题栏的左侧。其他将它们放在右侧(例如在 Windows 上)。如何使用 Qt 检测当前环境使用的哪一侧?如果没有“Qt 方式”来做到这一点,我该如何做这个平台特定的方式(对于 linux)?

【问题讨论】:

  • 我什至无法想象这是可能的。在 X11 中,控制按钮的放置是窗口管理器的主题,不是吗?我不确定窗口管理器主题是否也会影响这一点(可能取决于窗口管理器)。但是,如果我记得正确的窗口管理器详细信息大部分超出了小部件 API 的范围(即在您的情况下为 Qt),除了一些标准化协议的东西。谷歌“icccm”可能会有所帮助。
  • 可能根本没有按钮,或者您的标题栏可能是垂直的,或者按钮可能会翻转,具体取决于您的窗口标题使用的语言。基本上任何你能想象到的疯狂安排要么实际存在于某个窗口管理器中,要么可以轻松添加。

标签: linux qt x11 window-managers


【解决方案1】:

恐怕 Qt 对它所运行的窗口管理器一无所知。它只向 WM 提供窗口内容

你可能想看看这个:Qt - how to detect whether the application is running on GNOME or KDE?

基本上,它们会通过名称检测 WM 的 pid 是否存在,但如果 WM 进程名称在某些时候被重命名,您的代码就会中断。

除此之外(这是 Linux 特有的),Qt 确实可以告诉你它运行的平台 (see documentation),因此你可以推断窗口控件的位移

【讨论】:

  • 不幸的是,对我来说没有什么新鲜事。我想要某种 x11 api 来获取按钮位置。
  • Xorg 对 DE 也一无所知。它只为输入设备和图形渲染提供必要的“服务器”协议。此外,如果明天 Wayland 成为标准,您的 x11 呼叫将中断。顺便说一句,AFAIK,KDE 窗口主题允许您将控制按钮放置在任何您想要的位置。也许你需要弄清楚 Linux 系统是如何工作的。
  • 无论其他人说什么,再加上一点:如果使用带有weston的wayland,窗口装饰实际上是在客户端绘制的,因此每个窗口甚至可以决定将按钮放置在其他位置。阅读此咆哮以获取更多信息:blog.martin-graesslin.com/blog/2013/02/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 2011-05-15
  • 2011-11-08
  • 1970-01-01
相关资源
最近更新 更多