先明确两个概念:
模态对话框,没关闭它之前不能和其他对话框交互
非模态对话框,没关闭它能和其他对话框交互
exec()函数自带循环,其后代码不执行,直到关闭该窗口才返回,生成模态对话框
show()函数立马返回,其后代码跟着执行,默认生成非模态对话框。调用setModal(true)可使其生成模态对话框
信号:可以理解为一个动作,例如点击按钮
槽:可以理解为接受信号并执行相对行为的场所,如接收点击按钮的信号,然后打开某个窗口
注:拥有槽的累必须拥有Q_OBJECT宏,继承QOBJECT
使用信号的两种方式:
自动关联
在设计模式中拖入一个按钮,取名Exit
点击工具栏的Edit Signals/Slots或摁F4,进入不见的信号和槽的编辑模式
摁住按钮拖动至窗口,松开,出现如下界面:
勾选左下角的选项,按钮事件中选择关闭
这样该按钮就和窗口关闭事件关联起来
或者可以这么做,在Edit Widget模式(即一进设计模式的状态),对按钮右键,选择Go to slot,它会回到代码编辑模式并为你生成好函数声明、空函数体,可以在里面自定义。
若报错未找到匹配的ui_xxx.h文件,说明缺少东西。go to slot要求有ui文件,头文件,ui_xxx.h,.cpp源文件,源文件需包含头文件和ui_xxx.h
使用connect函数
在需要的地方使用connect函数,假设为按钮:
connect(A, &QPushButton::???, B, C)
A:发送信号的类
&QPushButton:发送什么信号,有宏定义
B:接受信号的类
C:执行的槽,可以是自定义的事件
如果把方法名改为on_A的对象名_信号名,可不用connect函数,变成自动关联