Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用Qt检测窗口标题栏上的控制按钮位置(在X11上)_Linux_Qt_X11_Window Managers - Fatal编程技术网

Linux 使用Qt检测窗口标题栏上的控制按钮位置(在X11上)

Linux 使用Qt检测窗口标题栏上的控制按钮位置(在X11上),linux,qt,x11,window-managers,Linux,Qt,X11,Window Managers,一些DE(在Unity或OSX上)将控制按钮(最小化、最大化、关闭)放置在标题栏的左侧。另一种方法是将它们放在右侧(例如,在窗户上)。如何使用Qt检测当前环境使用的哪一侧?如果没有“Qt方式”可以做到这一点,我如何才能以特定于平台的方式(对于linux)?恐怕Qt对它运行的窗口管理器一无所知。它只向WM提供窗口内容 您可能想看看这个: 基本上,它们检测WM的pid是否按名称存在,但是如果WM进程名称在某个点被重命名,代码将中断 除此之外(这是Linux特有的),Qt确实可以告诉您它正在运行的平台

一些DE(在Unity或OSX上)将控制按钮(最小化、最大化、关闭)放置在标题栏的左侧。另一种方法是将它们放在右侧(例如,在窗户上)。如何使用Qt检测当前环境使用的哪一侧?如果没有“Qt方式”可以做到这一点,我如何才能以特定于平台的方式(对于linux)?

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

您可能想看看这个:

基本上,它们检测WM的pid是否按名称存在,但是如果WM进程名称在某个点被重命名,代码将中断


除此之外(这是Linux特有的),Qt确实可以告诉您它正在运行的平台(),因此您可以推断出窗口控件的位移,我恐怕Qt对它正在运行的窗口管理器一无所知。它只向WM提供窗口内容

您可能想看看这个:

基本上,它们检测WM的pid是否按名称存在,但是如果WM进程名称在某个点被重命名,代码将中断


除此之外(这在某种程度上是Linux特有的),Qt确实可以告诉您它运行在哪个平台上(),因此您可以推断窗口控件的位移,我甚至无法想象这是可能的。在X11中,控制按钮的放置是窗口管理器的主题,不是吗?我不确定窗口管理器主题是否也会影响这一点(可能取决于窗口管理器)。然而,如果我没记错的话,窗口管理器的详细信息除了一些标准化的协议内容外,大部分都不在小部件API的范围内(例如,在您的例子中是Qt)。谷歌“icccm”可能会有所帮助。可能根本没有按钮,或者你的标题栏可能是垂直的,或者按钮可能会翻转,这取决于你的窗口标题使用的语言。基本上,任何你能想象到的疯狂安排,要么存在于某个窗口管理器中,要么很容易添加。我甚至无法想象这是可能的。在X11中,控制按钮的放置是窗口管理器的主题,不是吗?我不确定窗口管理器主题是否也会影响这一点(可能取决于窗口管理器)。然而,如果我没记错的话,窗口管理器的详细信息除了一些标准化的协议内容外,大部分都不在小部件API的范围内(例如,在您的例子中是Qt)。谷歌“icccm”可能会有所帮助。可能根本没有按钮,或者你的标题栏可能是垂直的,或者按钮可能会翻转,这取决于你的窗口标题使用的语言。基本上,任何你能想象到的疯狂的安排都存在于某个窗口管理器中,或者可以很容易地添加。不幸的是,对我来说没有什么新的。我想要一些用于获取按钮位置的X11API。Xorg对DE也一无所知。它仅为输入设备和图形渲染提供必要的“作为服务器”协议。此外,如果明天Wayland成为标准,您的x11呼叫将中断。顺便说一句,AFAIK、KDE窗口主题允许您将控制按钮放置在任何您想要的位置。也许你需要弄清楚Linux系统是如何工作的。不管其他人怎么说,再加上:如果将wayland与weston一起使用,窗口装饰实际上是在客户端绘制的,因此每个窗口甚至可以决定将按钮放置在其他地方。阅读这篇文章了解更多信息:不幸的是,对我来说没有什么新鲜事。我想要一些用于获取按钮位置的X11API。Xorg对DE也一无所知。它仅为输入设备和图形渲染提供必要的“作为服务器”协议。此外,如果明天Wayland成为标准,您的x11呼叫将中断。顺便说一句,AFAIK、KDE窗口主题允许您将控制按钮放置在任何您想要的位置。也许你需要弄清楚Linux系统是如何工作的。不管其他人怎么说,再加上:如果将wayland与weston一起使用,窗口装饰实际上是在客户端绘制的,因此每个窗口甚至可以决定将按钮放置在其他地方。有关更多信息,请阅读本手册: