我已经创建了一个“闪光灯”窗口,以在应用程序启动期间显示图像。显示图像,在派生的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();
}
我尝试将两个窗口都设置为模式窗口,但这都不起作用。
答案 0 :(得分:1)
以下程序对我有用;对你起作用吗? (在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();
}
如果该程序对您有用,那么您需要弄清楚自己的程序与该程序有何不同; OTOH如果此程序显示与您在自己的程序中看到的相同的行为,则可能是您所使用的Qt版本中存在错误。 (我正在运行OS / X 10.14.4,FWIW的2018 Mac mini上使用Qt 5.12.2进行测试)