Флаги Qt Window установлены в Qt :: WindowStaysOnTopHint, но не работают - PullRequest
0 голосов
/ 16 мая 2019

У меня есть окно 'flash' для показа изображения во время запуска приложения.Изображение отображается, в моем производном конструкторе QMainWindow я установил флаги:

setWindowFlags(Qt::CustomizeWindowHint
             | Qt::FramelessWindowHint                   
             | Qt::WindowStaysOnTopHint);

Однако, когда другое окно создано, я могу перетащить это новое окно перед всплывающим окном, которое я нене хочуЯ хочу, чтобы перетаскиваемое окно находилось за всплывающим окном до тех пор, пока оно не будет удалено.

Я ищу в Интернете, и то, что я установил, должно работать, но это не так.Я использую Qt Creator 4.9.0 на основе Qt 5.12.2

Моя система - 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 Ответ

1 голос
/ 16 мая 2019

У меня работает следующая программа; Работает ли это для вас? (на моем 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. (Я тестирую с Qt 5.12.2 на Mac mini 2018 под управлением OS / X 10.14.4, FWIW)

...