我有一个带有几个窗口的应用程序.每个窗口都是没有父级的QWidget.
我希望那些QWidget能够在应用程序之上,但不能在其他应用程序之上.它就像Visual Studio中的窗口,例如,它们是免费的.它们不能被主窗口隐藏,但可以由其他应用程序隐藏.
我试过"setWindowFlags(Qt :: WindowStaysOnTopHint);" ,但它使QWidget保持在所有应用程序之上.
使用SetWindowModality而不是WindowStayOnTopHint,两种模态模式(Qt :: WindowModal和Qt :: ApplicationModal)允许其他应用程序位于模态窗口之上.
LE:您可以在QDialog的文档页面中阅读有关ApplicationModal和WindowModal之间差异的更多信息,这里
LE 2:问题是你没有设置父级,所以要解决这个问题,为每个子窗口设置一个父窗口(除了你的主窗口之外的所有东西),一切都会按预期工作(子窗口将位于父,但不会在任何其他应用程序窗口之上):
int main(int argc, char** argv) { QApplication a(argc, argv); QWidget w; QVBoxLayout* layout = new QVBoxLayout(&w); QPushButton* btn = new QPushButton("Show a non-modal window"); layout->addWidget(btn); QWidget* mainWindow = &w; QObject::connect(btn, &QPushButton::clicked, [mainWindow]() { QWidget* dlg = new QWidget(mainWindow); QVBoxLayout* dlgLayout = new QVBoxLayout(dlg); dlg->setWindowFlags(Qt::Window); QLabel* lbl = new QLabel("Non-modal window...", dlg); dlgLayout->addWidget(lbl); dlg->show(); }); w.show(); return a.exec(); }