有没有办法检查Qt窗口是否标记为始终在顶部(由用户)?我想在closeEvent()上检查它,并在下次用户打开窗口时保存它。
P.S:我检查windowFlags
希望设置Qt.WindowStaysOnTopHint
标志,但标志似乎不会受到影响。
答案 0 :(得分:1)
使用xlib
,可以调用XGetWindowProperty
函数来检查所需的窗口状态提示。
首先检查必要条件,例如sudo apt-get install libx11-dev
。
在pro
文件中,链接xlib
并要求x11extras
qt模块。
QT += x11extras
LIBS += -lX11
这是一个工作示例,如果传入的小部件指针指向 always-on-top 窗口,则返回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);
}