QDialog两个显示函数show()和exec()的区别

  • QDialog的显示有两个函数show()和exec()。他们的区别在参考文档上的解释如下:

    • show():显示一个非模式对话框。控制权即刻返回给调用函数。
    • exec():显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。
  • 模态对话框(不可以对其他窗口进行操作) 非模态对话框(可以对其他窗口进行操作)

下方代码,创建了模态和非模态对话框,并有详细注释,仔细阅读就能明白

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //1.模态创建 阻塞
    connect(ui->myBtn1,&QPushButton::clicked,[=](){
        
        QDialog dia(this);// 把当前窗口设为父窗口,
        dia.resize(200,200);// 如果不设置大小,窗口就会很小,就会有一个警告
        dia.exec();// 阻塞显示
        
		// 当窗口关闭的时候,这句话才会打印出来
        qDebug() << "模态对话框";
    });
    
	//1.非模态创建 不阻塞阻塞
    connect(ui->myBtn2,&QPushButton::clicked,[=](){
        
        /*因为是不阻塞窗口所以就会往下运行,若在栈上创建非模态,
         当这个函数运行完就会自动销毁,窗口只会一闪而过,
         所以要在堆上创建,避免多次创建对话框开关开关...导致内存得不到释放
         那么就要给对话框设置一个属性,此对话框关闭后资源自动释放*/

        // QDialog dia(this);
        QDialog* dia = new QDialog(this);
        dia->setAttribute(Qt::WA_DeleteOnClose);// 窗口关闭的时候就会释放窗口资源
        dia->resize(200,200);// 如果不设置大小,窗口就会很小,就会有一个警告
        dia->show();// 不阻塞阻塞显示

		// 窗口被创建后,这句话紧接着就打印出来
        qDebug() << "非模态对话框";
    });

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值