Qt窗口标志设置为Qt :: WindowStaysOnTopHint但不起作用

时间:2019-05-16 14:22:00

标签: c++ qt always-on-top

我已经创建了一个“闪光灯”窗口,以在应用程序启动期间显示图像。显示图像,在派生的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();
    }

我尝试将两个窗口都设置为模式窗口,但这都不起作用。

1 个答案:

答案 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进行测试)