在QT中,UI界面可视化设计功能是一个优秀的辅助设计功能。相对于传统的通过手动设计界面要来得更加直观方便,也更便于学习。
但在使用UI可视化设计这一功能时,我们会发现自己无法在widget.h声明文件中找到其声明。这就导致了我们对这些控件的操控能力降低,其中最明显的莫过于在需要将两个对象的槽函数与信号对接时无法通过手动链接函数connect()来主动对接它们。
想要解决这个问题就需要解决这两个问题:
- UI界面中生成的控件的实现代码在哪里?
- 如何操作UI界面生成的控件的信号与槽?
QT已经很好的解决了以上问题,具体的机制如下:
首先我们在UI设计界面以可视的方式添加的控件都会被项目中的widget.ui文件以XML的格式记录下来。
然后QT会在编译的时候依据widget.ui生成ui_widget.h文件。该文件保存在编译过程目录中(形如)。该文件定义了一个Ui_widget类(),在类中定义了一个setupUi()函数实例化了所有在UI可视化界面中创建的控件。并在母窗口widget对象中定义了一个ui指针
通过该指针就可以通过”ui->控件名”的方式操作控件。
至此QT实现了可视控件的实例化及操作。
但是由于可视化的控件的实例化代码是在编译时自动生成的,也因此我们无法修改QT系统所创建的可视化对象。特别是对可视化控件信号与槽的应用。
对于这个问题QT采用了QMetaObject::connectSlotsByName(Widget);函数,通过特殊的命名格式on_sender_signal将信号与槽关联起来。
具体操作
右击控件
单击选框中的“转到槽”选项
此时会弹出第二个选项框询问需要建立的槽所对应的信号
找到需要建立槽的信号并点击
与connect的对比