QT无模式对话框和有模式对话框的调用

一、模态对话框

模态对话框是一个对话框,它阻塞了对同一应用程序中其他可见窗口的输入。用于向用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。对话框可以是应用程序模式(默认)或窗口模式。当应用程序模态对话框打开时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模式对话框只阻止访问与该对话框相关联的窗口,允许用户继续使用应用程序中的其他窗口。

显示模态对话框最常见的方法是调用它的exec()函数。 当用户关闭对话框时,exec()将提供一个有用的返回值。 想要关闭对话框并返回适当的值,您必须连接一个默认按钮(对话框的默认按钮是当用户按Enter (Return)时按下的按钮。 此按钮用于表示用户接受对话框的设置并希望关闭对话框。 使用QPushButton::setDefault(), QPushButton::isDefault()和QPushButton::autoDefault()来设置和控制对话框的默认按钮。   ),例如一个OK按钮到accept()槽,一个Cancel按钮到reject()槽。 或者,您可以使用Accepted或Rejected调用done()槽。  

另一种方法是调用setModal(true)或setWindowModality(),然后调用show()。 与exec()不同,show()将控制权立即返回给调用者。 调用setModal(true)对于进度对话框特别有用,因为用户必须能够与对话框交互,例如取消长时间运行的操作。 如果您同时使用show()和setModal(true)来执行长时间操作,则必须在处理过程中定期调用QCoreApplication::processEvents()来使用户能够与对话框进行交互。 

其中setModal(ture)为模态对话框,setModal(false)为非模态对话框。

二、非模态对话框:

非模态对话框是在同一个应用程序中独立于其他窗口操作的对话框。文字处理器中的查找和替换对话框通常是非模态的,允许用户与应用程序的主窗口和对话框进行交互。

使用show()显示非模态对话框,它会立即将控制权返回给调用者

如果在隐藏对话框后调用show()函数,对话框将显示在原来的位置。这是因为窗口管理器决定了程序员未显式放置的窗口的位置。要保留被用户移动的对话框的位置,请将其位置保存在closeEvent()处理程序中,然后在再次显示对话框之前将其移动到该位置。

调用close()方法后首先它会向widget发送一个关闭事件(QCloseEvent)。如果widget接受了关闭事件(QCloseEvent),窗口将会隐藏(实际上调用hide())。如果widget不接受关闭事件,那么窗口将什么也不做。默认情况下widget会接受关闭事件,我们可以重写QCloseEvent事件,可以选择接受或者不接受。

   如果widget设置了Qt::WA_DeleteOnClose属性,widget将会被释放。不管widget是否可见,关闭事件都会传递给widget。即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。

   所以说调用close()并不一定就会将窗口对象销毁。而只有设置了 Qt::WA_DeleteOnClose属性才会删除销毁。如果这个属性没有设置,close()的作用和hide(),setvisible(false)一样,只会隐藏窗口对象而已,并不会销毁该对象。

三、实现

在此我们使用按钮来跳转到槽函数,进而实现对话框的调用。

接着实现槽函数

别忘记头文件

最后实现效果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值