gpt4 book ai didi

c++ - Qt - 有没有办法检查窗口是否标记为始终在最前面(linux)?

转载 作者:行者123 更新时间:2023-11-30 05:03:17 25 4
gpt4 key购买 nike

有没有办法检查 Qt 窗口是否(由用户)标记为始终在最前面?我想在 closeEvent() 上检查并保存它以备下次用户打开窗口时使用。

P.S:我检查了 windowFlags 希望 Qt.WindowStaysOnTopHint 标志将被设置,但标志似乎没有受到影响。

最佳答案

使用 xlib,可以调用 XGetWindowProperty 函数检查所需的窗口状态提示。

首先检查必要条件,例如sudo apt-get install libx11-dev

pro 文件中,链接xlib 并需要x11extras qt 模块。

QT += x11extras
LIBS += -lX11

这是一个工作示例,如果传入的小部件指针指向始终在顶部窗口,则返回true的函数:

#include <X11/Xlib.h>
#include <QtX11Extras/QX11Info>

bool isAlwaysOnTop(QWidget * widget)
{
Atom atr;
int afr;
unsigned long items;
unsigned long bytes;
unsigned char *data;

Display * display = QX11Info::display();
Atom property = XInternAtom(display, "_NET_WM_STATE", False);
if(XGetWindowProperty(display, widget->winId(), property, 0L, 1L, False, 4, &atr, &afr, &items, &bytes, &data) == 0)
{
Atom abv = XInternAtom(display, "_NET_WM_STATE_ABOVE", False);
Atom res = reinterpret_cast<Atom *>(data)[0];
return (res==abv);
}
return false;
}

它可以在小部件 closeEvent 内部使用:

void Form::closeEvent(QCloseEvent *)
{
qDebug() << isAlwaysOnTop(this);
}

关于c++ - Qt - 有没有办法检查窗口是否标记为始终在最前面(linux)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49485867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com