在《Qt信号和槽函数机制,此篇足矣》一文中已经描述了Qt的信号和槽函数机制,在实际项目开发中,一般会使用QObject下提供的接口函数创建信号和槽函数之间的关联:
但是在Qt Designer中提供了一个快速关联信号和槽函数的方式:使用『转到槽...』对话框创建选定控件之间的信号和槽函数关联。
在点击『转到槽...』选项后,会弹出一个编辑框,例如此处以QPushButton按钮控件为例,则会弹出如下的对话框:
从上图可知,首先QObject和QWidget下的信号是公共的,QAbstractButton是按钮类独有的,Qt使用该类抽象出了按钮的一些公共操作,并已定义好具体的信号。当选中具体信号后,点击“确定”按钮,QtCreator会自动生成一个槽函数,例如,如果选择了clicked()这个信号,则会在代码中生成如下代码,在头文件生成代码如下:
private slots: void on_pushButton_clicked();
在源文件中生成代码如下:
本质上,QtCreator生成代码的成员函数的命名是能够被QMetaObject的自动连接工具识别的,在构建过程中,在uic生成的用于描述界面的C++文件中,会出现以下代码:
因此,通过connectSlotByName()就将名称和槽函数进行了关联,该函数会递归搜索给定对象的所有子对象,并将它们的匹配信号连接到遵循特定格式命名的槽函数,格式如下:
void on_
在实际使用过程中,只需要声明和实现一个槽函数,其名称遵循标准约定,就可以将一个控件对象的信号和具体槽函数关联,当然这个过程由QtCreator自动完成。
Qt提供的信号和槽函数的自动连接机制,为开发小部件提供了标准命名约定和显式接口。通过提供实现给定界面的源代码,在设计用户界面时无需再编写代码就可以检查设计是否真正有效了。
小生总结
基于QtCreator,提供的信号和槽函数的自动连接机制在实际开发中,经常会被使用到,特别是在需要快速验证功能和需求的时候,这种方式比使用connect()关联信号和槽函数的开发效率要快很多。但是,如果界面中同类型控件较多的情况下,就需要注释清楚,不然不好区分具体控件下的功能。
在实际项目开发中,对于自定义的信号,习惯使用connect()进行槽函数的关联。对于具体界面中控件,如果是Qt提供的标准控件,则可以使用信号和槽函数的自动连接机制,以加快开发效率。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !