当主窗口保持在顶部时,子窗口被遮挡 - MacOS

Guo*_*ang 8 c++ qt qt5

通常,工具窗口始终位于主窗口的顶部,即使它失去焦点.然而.

在MacOS上,当主窗口设置窗口标志时Qt::WindowStaysOnTopHint,工具窗口位于其下方.

在Windows系统上,"工具"窗口按预期位于主窗口的顶部.

有没有办法在工具窗口位于其上方时将主窗口保持在顶部?

在此输入图像描述

我目前的Qt版本是5.9.6和5.12.1.MacOS版本是10.13.4.

这是我的测试代码

#include <QtGui>
#include <QtWidgets>

int main(int argc, char * argv[])
{
    QApplication app(argc, argv);

    QDialog* mw = new QDialog(0, Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
    mw->setWindowTitle(QLatin1String("Main"));
    mw->resize(400, 300);
    mw->move(100, 100);

    QWidget* d = new QWidget(mw, Qt::Tool);
    d->setWindowTitle(QLatin1String("Tool"));
    d->resize(200, 100);
    d->show();
    mw->exec();
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

bna*_*ker 2

问题是您正在调用QDialog::exec,而不是直接调用窗口提示。exec对话框的方法将其显示为模式对话框,这意味着在用户关闭对话框之前不允许与应用程序中的任何其他窗口进行交互。更改mw->exec()mw->show()将证明无论窗口提示如何,工具窗口确实可以置于主窗口之上。

您可能会考虑使用非主窗口QDialog(这是一种不常见的情况)。对话框旨在阻止用户继续正常使用应用程序,直到回答问题或确认某些内容(例如错误)。它们通常不被认为是用户与应用程序交互的主窗口。使用 的另一个子类QWidget,例如QMainWindow,甚至只是设置了标志的普通子类QWidgetQt::Window可能更合适。