Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt窗口标志设置为Qt::WindowStaysOnTopHint但不工作_C++_Qt_Always On Top - Fatal编程技术网

C++ Qt窗口标志设置为Qt::WindowStaysOnTopHint但不工作

C++ Qt窗口标志设置为Qt::WindowStaysOnTopHint但不工作,c++,qt,always-on-top,C++,Qt,Always On Top,我创建了一个“flash”窗口,在应用程序启动期间显示图像。图像将显示,在我的派生QMainWindow构造函数中,我设置了以下标志: setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); 但是,当创建另一个窗口时,我可以将这个新窗口拖到我不想要的启动窗口前面。我希望拖动的

我创建了一个“flash”窗口,在应用程序启动期间显示图像。图像将显示,在我的派生QMainWindow构造函数中,我设置了以下标志:

setWindowFlags(Qt::CustomizeWindowHint
             | Qt::FramelessWindowHint                   
             | Qt::WindowStaysOnTopHint);
但是,当创建另一个窗口时,我可以将这个新窗口拖到我不想要的启动窗口前面。我希望拖动的窗口位于飞溅窗口的后面,直到它被移除

我在网上搜索,我设置的应该可以工作,但不能。我正在使用基于Qt5.12.2的QtCreator 4.9.0

我的系统是iMAC(视网膜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();
    }
#包括
#包括
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
QMainWindow*mw=新的QMainWindow();
mw->setWindowFlags(Qt::CustomizeWindowint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
微波->调整大小(500500);
mw->show();
QMainWindow*secondWindow=新的QMainWindow();
secondWindow->SetWindowModal(Qt::ApplicationModel);//调整大小(500500);
第二窗口->显示();
返回app.exec();
}

我已经尝试将两个窗口都设置为模式,但都没有帮助。

以下程序对我有效;对你有用吗?(在我的Mac电脑上,运行此程序会打开一个始终位于所有其他窗口前面的灰色空窗口)

#包括
#包括
int main(int argc,字符**argv)
{
QApplication应用程序(argc、argv);
QMainWindow*mw=新的QMainWindow;
mw->setWindowFlags(Qt::CustomizeWindowint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
微波->调整大小(500500);
mw->show();
QMainWindow*secondWindow=新的QMainWindow;
第二窗口->调整大小(500500);
第二窗口->显示();
返回app.exec();
}

如果这个程序确实适合你,那么你需要弄清楚你自己的程序与这个程序有何不同;如果这个程序显示出与您在自己的程序中看到的相同的错误行为,那么您正在使用的Qt版本中可能存在错误。(我正在运行OS/X 10.14.4,FWIW的2018 Mac mini上使用Qt 5.12.2进行测试)

您是否考虑过使用?@TrebledJ,可能考虑过,但我在前一段时间写过这篇文章,它完全满足了我的需求,除了保持在顶部……根据标志的名称,这应该是可能的。您在它前面拖动了什么窗口?你创造了一个?您使用什么标志来创建另一个窗口?其他应用程序窗口是否显示在前面?@Nick,我希望我的应用程序创建的所有窗口都显示在闪屏后面。所有窗口的窗口都使用默认值,除了我发布的splash。我想说的是,这个窗口可能没有问题。可以显示正在创建的其他窗口的代码吗?不一样,请在同一应用程序中创建另一个窗口,然后确保第二个窗口不会也不能出现在原始窗口的前面。好的,完成。见更新文本。自由地提出你自己的程序来证明错误;如果人们能够自己编译一个程序并观察故障,这就允许他们对问题进行实验并找出进入条件,而不是仅仅猜测可能出现的问题。谢谢,你的代码工作正常,我真的不确定问题在哪里…现在就查查看。我想我可以看到我的问题在哪里,但我不知道为什么它会起作用。在我的主窗口中,我创建了一个新的小部件,然后将其视为一个窗口,这就是问题的根源,如果您修改了代码而不是另一个QMainWindow,请使用“QWidget*pobjWin=new QWidget();”然后使用与主窗口相同的方法,最后调用show…这个新的小部件不遵守窗口规则。只是将例程更改为使用QMainWindow而不是QWidget,仍然存在相同的问题。。。
#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();
}