模态对话框会阻塞父窗口的交互

置顶对话框不影响父窗口的交互,但是也会显示在其他窗口上面,导致同一个程序,多个窗口发生分层的效果

要想永远在父窗口上面且不影响父窗口的交互,可以使用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关闭之后才会显示

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐