模态对话框会阻塞父窗口的交互
置顶对话框不影响父窗口的交互,但是也会显示在其他窗口上面,导致同一个程序,多个窗口发生分层的效果
要想永远在父窗口上面且不影响父窗口的交互,可以使用Qt::Tool属性
QWidget*p = new QWidget(this);
p->setWindowFlags(p->windowFlags() | Qt::Tool);
p->resize(300, 200);
p->show();
也是要多看文档才发现的,不然会走很多冤枉路
如果要弹出对话框,永远在父窗口上面,并且阻塞父窗口,就直接设置模态对话框即可
QWidget*p = new QWidget(this);
p->setWindowFlags(p->windowFlags() | Qt::Window);
p->setStyleSheet("background: yellow");
p->setWindowModality(Qt::WindowModal);
p->show();
也是看文档才发现modal的三种不同方式
https://doc.qt.io/qt-5/qt.html#WindowModality-enum
QDialog阻塞方式
QDialog *p = new QDialog();
p->setModal(true);
p->show();
qDebug()<<"after show();//QDialog关闭之前就显示出来了
QDialog *p = new QDialog();
p->exec();
qDebug()<<"after show";//QDialog关闭之后才会显示