![](/img/trans.png)
[英]setWindowFlags(Qt::WindowStaysOnTopHint) hides Qt Window
[英]Qt Window flags set to Qt::WindowStaysOnTopHint but not working
我創建了一個“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();
}
我試過將兩個窗口都設置為模態,這也無濟於事。
以下程序對我有用; 對你起作用嗎? (在我的 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 進行測試)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.