Qt模态与非模态

引言

代码:

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QDialog dialog(this);
    dialog.show();
}

现象:

dialog一闪而过。

更改代码:

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QDialog *dialog = new QDialog(this);
    dialog->show();
}

现象:

使用了QDialog对象的指针,并使用new运算符开辟了内存单元,在运行程序就正常显示了。

区别:

  • 我们说定义了一个对象,是指 QDialog dialog
  • QDialog *dialog,不能称为定义了一个对象,而应该说成定义了一个QDialog类对象的指针变量
  • 后面也会把 QDialog *dialog; 说成定义了一个QDialog对象

正题

不用指针也可以让对话框显示出来,代码:

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QDialog dialog(this);
    dialog.exec();
}

但是,对话框弹出来了,MyWidget窗口没有出来;当关闭对话框后,MyWidget窗口才弹出来。
这个对话框与前面的对话框的效果不同,成为模态对话框;前面的那种对话框成为非模态对话框。

  • 模态对话框就是在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互
  • 非模态对话框,既可以与它交互,也可以与同一程序的其他窗口交互
  • 要想使一个对话框成为模态对话框,则只需要调用它的 exec() 函数;而要使其成为非模态对话框,则可以使用new操作来创建,然后使用 show() 函数来显示
  • 使用 show() 函数也可以建立模态对话框,只需在其前面使用 setModal() 函数即可。
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);
    QDialog *dialog = new QDialog(this);
    dialog->setModal(true);
    dialog->show();
}

与exec()函数效果不同:

  • MyWidget窗口也显示出来了
  • 因为调用 show() 函数后,会立即将控制权交给调用者,程序可以继续往下执行
  • 调用 exec() 函数却不同,只有当对话框被关闭时才返回
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值