我有一个带有几个窗口的应用程序.每个窗口都是没有父级的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();
}
Run Code Online (Sandbox Code Playgroud)