【QT】| exec()和show()

本文详细解析了Qt中对话框的show()与exec()函数的区别。show()可显示非模式与模式对话框,但不会阻塞后续代码执行;而exec()显示模式对话框时会锁定程序,直至对话框关闭。exec()还负责进入事件循环,处理用户及系统事件。

问题引出:

				this->dialog->show();
   				this->dialog->exec();

1. show()函数:

	即可以显示非模式也可以显示模式对话框;
	当设置modal为true时,显示模式对话框,

2. exec()函数:

	显示模式对话框,不关闭此对话框,不能执行别的操作。

3.区别:

  show()函数显示模式对话框时,是否与exec()显示的一样呢?答案是:不一样
  show()显示的模态对话  框并非真正意义上的模态,虽然在对话框弹出的时候,程序的其它操作(按钮、窗口切换等)都失效了;但是程序仍然在调用对话之后,马上继续执行后面的代码。这样,就不会得到窗口的返回值。
  exec()函数在调用之后,程序就被锁定在原地。等待窗口的关闭。
参考:https://blog.youkuaiyun.com/hydhyd0/article/details/72667796

return a.exec();

a.exec()的作用:
  1. 进入时间循环;
  2. wait,直到响应a可能的输入;
  3. QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;
  4. 程序遇到exit()退出时,机会返回exec()的值。
### Qt 中 `exec` 函数的用法 在 Qt 框架中,`exec()` 是一个非常重要的函数,主要用于事件循环的启动。它通常用于应用程序的主要入口点以及某些对话框或子窗口的显示控制。 #### 应用程序级别的 `exec()` 当开发基于 Qt 的 GUI 应用程序时,`QApplication::exec()` 被用来启动应用程序的主事件循环[^1]。这个函数会一直运行直到退出条件被满足(例如调用了 `exit()` 或者关闭了最后一个顶级窗口)。以下是典型的使用方式: ```python import sys from PyQt5.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hello World!") label.show() sys.exit(app.exec_()) ``` 在这个例子中,`app.exec_()` 启动了事件循环,使得应用能够响应用户的输入其他系统事件[^2]。 #### 对话框中的 `exec()` 除了在全局的应用级别之外,`exec()` 还可以应用于模态对话框(Modal Dialogs),比如 `QDialog` 其派生类。在这种情况下,`exec()` 不仅显示对话框并进入局部事件循环,还返回一个整数值表示用户如何结束该对话框的操作(通常是接受或拒绝操作的结果码)。 下面展示了一个简单的模态对话框实现方法: ```python from PyQt5.QtWidgets import QDialog, QPushButton, QVBoxLayout class ExampleDialog(QDialog): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle('Example Modal Dialog') layout = QVBoxLayout() button_accept = QPushButton('Accept', self) button_reject = QPushButton('Reject', self) button_accept.clicked.connect(self.accept) # 使用 accept 方法来设置结果为 Accepted button_reject.clicked.connect(self.reject) # 使用 reject 方法来设置结果为 Rejected layout.addWidget(button_accept) layout.addWidget(button_reject) self.setLayout(layout) dialog = ExampleDialog() result = dialog.exec_() if result == QDialog.Accepted: print("User accepted the dialog.") else: print("User rejected the dialog.") ``` 这里展示了通过点击按钮触发不同的执行路径,并利用 `exec_()` 返回值判断用户的选择行为[^3]。 需要注意的是,在非模态对话框或者无阻塞需求的情况下,则应该考虑采用 `show()` 来代替 `exec()`,因为后者会引起当前线程暂停直至完成整个过程为止。 --- ### 常见问题及相关解决方案 如果遇到关于 `exec()` 的具体错误消息或者其他异常情况,请仔细阅读官方文档说明部分以及检查是否有遗漏必要的配置项;另外也可以参考社区论坛讨论区寻求帮助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值