I have an application with several windows. Each window is a QWidget without parent.
I want those QWidget to be on top of the application, but not on top of other application. It's like the windows in Visual Studio, for instance, when they are free. They can't be hidden by the main window, but can be by an other application.
I tried with "setWindowFlags(Qt::WindowStaysOnTopHint);" , but it keeps the QWidget on top of all the applications.
Use SetWindowModality instead of WindowStayOnTopHint, and both modal modes (Qt::WindowModal and Qt::ApplicationModal) permit other applications to be on top of your modal window.
LE: You can read more about the difference between ApplicationModal and WindowModal in the QDialog's documentation page, here
LE 2: The problem is that you don't set a parent, so to solve this set a parent for every child window (everything except your main window) and everything will work as you expected (the child windows will be on top of the parent, but won't be on top of any other application windows):
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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With