QDialog: Как включить нахождение за родителем (главное окно) в Windows? - PullRequest
0 голосов
/ 01 декабря 2018

Я использую QDialog.В конструкторе я установил setWindowFlags(Qt::Window)setWindowFlags(Qt::Window).В Linux / KDE эффект состоит в том, что диалоговое окно получает собственную кнопку панели окон и может идти за своим родителем (главное окно).Это то, что я хочу иметь.

В Windows, однако, диалоговое окно не имеет собственной кнопки панели окна, и оно всегда находится над главным окном.Можно ли добиться того же поведения в Windows, что и в Linux?

Я играл с флагом окна Qt::WindowStaysOnTopHint, но это не имело никакого эффекта.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

У меня была такая же проблема.Я обнаружил, что если вы используете StaysOnTopHint, диалоги останутся поверх других окон (не только основного окна приложения).Это помогло мне.Код написан на Python, но должен быть легко переведен на C ++.Здесь self.parent - главное окно приложения.

        if staysOnTop:
            dialog.setParent(self.parent, Qt.Dialog | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint | Qt.WindowCloseButtonHint)
        else:
            dialog.setParent(None, dialog.windowFlags() & ~Qt.WindowStaysOnTopHint)
0 голосов
/ 15 января 2019

Передайте вашему QDialog родительский NULL, тогда он не зависит от вашего главного окна и может идти за основным окном.

Затем в функции closeEvent () вашего главного окна вызовите myDialog-> close ().Это закроет диалоговое окно при выходе из главного окна.

0 голосов
/ 02 декабря 2018

установить ваш родительский диалог, отправив его указатель на ваш диалоговый конструктор.например, если вы показываете QFileDialog для того, чтобы оставаться на вершине, используйте

QFileDialog::getOpenFileName(this,
    tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));

вместо:

QFileDialog::getOpenFileName(NULL,
    tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));
...