我已经创建了一个'flash‘窗口来显示应用程序启动期间的图像。图像被显示,在我的派生QMainWindow构造函数中,我设置了标志:
setWindowFlags(Qt::CustomizeWindowHint
| Qt::FramelessWindowHint
| Qt::WindowStaysOnTopHint);
但是,当创建另一个窗口时,我可以将这个新窗口拖到启动窗口的前面,这是我不想要的。我希望拖动的窗口一直在启动窗口的后面,直到它被移除。
我在网上搜索,我设置的内容应该可以工作,但它不起作用。我正在使用基于Qt 5.12.2的Qt Creator 4.9.0
我的系统是iMAC (Retina 5K,27英寸,2015年末)。
编辑我使用下面的代码来测试和证明我的错误,我的应用程序窗口需要是模式的,但我希望启动窗口总是在顶部。
#include <QMainWindow>
#include <QApplication>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow * mw = new QMainWindow();
mw->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
mw->resize(500, 500);
mw->show();
QMainWindow * secondWindow = new QMainWindow();
secondWindow->setWindowModality(Qt::ApplicationModal); // <- This breaks the always on top flag
secondWindow->resize(500, 500);
secondWindow->show();
return app.exec();
}
我已经尝试将两个窗口都设置为模式,但也无济于事。
发布于 2019-05-16 22:31:55
下面的程序对我有效;对你有效吗?(在我的Mac上,运行这个程序会打开一个灰色的空白窗口,它总是在所有其他窗口的前面)
#include <QMainWindow>
#include <QApplication>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow * mw = new QMainWindow;
mw->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
mw->resize(500, 500);
mw->show();
QMainWindow * secondWindow = new QMainWindow;
secondWindow->resize(500, 500);
secondWindow->show();
return app.exec();
}
如果这个程序对你有效,那么你需要找出你自己的程序与这个程序的不同之处;如果这个程序显示出你在你自己的程序中看到的同样的错误行为,那么它可能是你正在使用的Qt版本中有一个bug。(我正在运行OS/X 10.14.4,FWIW的2018 Mac mini上使用Qt 5.12.2进行测试)
https://stackoverflow.com/questions/56170786
复制相似问题