QDialog

对话框通常是顶层窗口,出现在程序最上层,实现短期任务和用户交互。

QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:

如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。

  顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置,无任务栏图标。

1、对话框类型?

模态和非模态,Qt 有两种级别的模态对话框:应用程序级别的模态和窗口级别的模态默认是应用程序级别的模态。

应用程序级别的模态是指,当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口。

窗口级别的模态是指,该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。

2、如何实现模态对话框和非模态?

QT使用QDialog::exec实现对话框的应用程序级别的模态

QDialog::open()实现窗口级别的模态对话框

使用QDialog::show()实现非模态对话框。

例子1

void MainWindow::open()

{

 

    QDialog dialog(this);

 

    dialog.setWindowTitle(tr("Hello, dialog!"));

 

    dialog.show();

 

}//窗口一闪而过

show函数不会阻塞当前线程,对话框会一闪而过,原因dialog建立在栈上,退出作用域,会被析构,窗口不存在。

解决办法

创建堆上的对话框

 

堆上创建,必须释放内存。如何实现

dialog 的WindowAttribute    dialog->setAttribute(Qt::WA_DeleteOnClose);//作用对话框关闭时,自动销毁对话框。

 

QDialog dialog(this); 

 dialog.exec();

不用动态申请,基类控件释放的时候自动释放子类控件。窗口会一直显示的模态对话框

show也可以实现模态对话框:

QDialog *dialog=new QDialog(this);

dialog->setModel(true);

dialog->show();

主窗口和此模态对话框可以同时显示,exec只能显示对话框一个,关闭其他窗口才会显示。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值