簡體   English   中英

Qt 窗口標志設置為 Qt::WindowStaysOnTopHint 但不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM