QT中的对话框

目录

一、模态对话框

二、非模态对话框

三、两者异同


一、模态对话框

        模态对话框弹出以后不可以对其他的窗口进行操作,不把它关了就无法操作其他的窗口。不过无法操作的是与它“一家”的窗口,对于一些与它没关系的窗口还是可以操作的。

connect(ui->actionmodal,&QAction::triggered,[=](){
        //创建一个模态对话框
        QDialog dlg(this);
        //设置对话框的名称
        dlg.setWindowTitle("模态对话框");
        //设置对话框的大小
        dlg.resize(200,100);
        //显示模态对话框
        dlg.exec();
    	qDebug() << "模态对话框关闭";
    });

        模态对话框一旦弹出,代码就不会再往下执行了,所以只有关闭模态对话框后qDebug的内容才会输出出来。

二、非模态对话框

        与模态对话框正好相反,非模态对话框弹出后仍然可以对其他的对话框进行操作。

connect(ui->actionnotmodal,&QAction::triggered,[=](){
        //创建一个非模态对话框
        QDialog * dlg = new QDialog(this);
        //设置对话框的名称
        dlg->setWindowTitle("非模态对话框");
        //设置对话框的大小
        dlg->resize(200,100);
        //显示非模态对话框
        dlg->show();
        qDebug() << "非模态对话框弹出";
    });

         需要注意的是非模态对话框创建后最好将其释放,否则会造成内存浪费。使用setAttribute()函数,其中的Qt::WA_DeleteOnClose参数所代表的意思就是在dlg对话框关闭的时候自动将其内存释放,这样就不用担心关闭后的对话框再占用内存了。

三、两者异同

        模态对话框与非模态对话框其实都是对话框,两者的区别主要在于调用的方式不同。如果使用exec()弹出对话框就是模态对话框,代码阻塞到这里无法往下执行,无法调用函数响应对其他对话框的操作了,自然也就无法操作其他对话框了。用show()弹出对话框就是非模态对话框,不影响代码往下执行,这样也就可以操作其他对话框了。在上面的代码中都有设置对话框的名称和大小的代码。如果不设置对话框的名称,默认使用的是项目名称,影响不大。如果不重置大小的话,虽然代码可以运行,但是会发出警告,应为对话框的大小有一个最小值,小于这个值就会发出警告。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐喽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值