QT学习:模态和非模态对话框

本文探讨了如何在C++中使用QDialog创建模态和非模态对话框,包括使用new和exec()函数的区别,以及setModal()和setWindowModality()的作用。通过实例演示了如何控制对话框与MyWidget窗口的交互方式。
摘要由CSDN通过智能技术生成
#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
 ui->setupUi(this);
QDialog dialog(this);
dialog.show();
QDialog dialog2(this);
dialog2.exec();
}
MyWidget::~MyWidget()
{
 delete ui;
}

创建dialog对象,运行程序会发现一个对话框窗口一闪而过,然后只显示MyWidget类对象得窗口。

因为构造函数一结束,对象也会被释放。

为了不让dialog消失,可以将QDialog对象得创建代码改如下:

        QDialog * dialog = new QDialog(this);

        dialog  ->show();

不是定义一个对象,而是定义了一个指向QDialog类对象的指针变量。且对象指向了父窗口,所以没必要使用delete来释放该对象。

 

其实不用指针也可以让对话框显示出来:

QDialog dialog(this);

dialog.exec();

这时对话框就会弹出来了,但是MyWideget对象的窗口并没有出来,关闭对话框后,MyWidget对象的窗口才会弹出来。这种对话框称为模态对话框。

上面的那种可以同时与另外一个对话框进行交互称为非模态对话框。

想要使一个对话框成为模态对话框,只需要调用它的exec()函数,而要使用其成为非模态对话框,可以使用new操作来创建,然后使用show()函数来显示。其实也可以使用show()函数也可以建立模态对话框,只需在其前面使用setModal()函数即可。

QDialog * dialog = new QDialog(this);

dialog ->setModal(true);

dialog->show();

但是该办法和exec()实现效果不一样,这种办法,MyWidget对象窗口也显示出来,因为show()调用完之后就把控制权给调用者。而exec函数只有对话框被关闭才会返回。

与setModal()函数相似的还有一个setWindowModality()函数,他有一个参数来设置模态对话框要阻塞的窗口类型,可以是Qt::NonModal()函数(不阻塞任何窗口,就是非模态),Qt::WindowModal(阻塞它的父窗口和所有祖先窗口以及它们的子窗口),Qt::ApplicationModal(阻塞整个应用程序的所有窗口)三者之一,而SetModal()函数默认设置是Qt::ApplicationModal.

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值