简介
Qt中使用信号和槽机制来完成对象之间的协同操作。信号和槽都是函数。可以将信号和槽关联起来,当信号发送消息,就会执行槽的函数。
在类中添加信号和槽函数,需要在头文件中使用slots关键字来修饰槽函数,使用signal来修饰信号函数。Qt4中必须使用,Qt5使用新的connect语法时可不用,但是为了与一般函数作区分,建议使用。在头文件在定义好函数,就可以在源文件中添加函数源码。
在定义槽函数时,Qt Creator提供了一个快速添加定义的方法:在头文件中点击槽函数,按下Alt+Enter(也可以右击,选择Refactor菜单项),在弹出窗口中选择“在xxx.cpp添加定义”,便会跳转到源文件,并且自动创建槽函数的定义。这种方式也适用于现在源文件中添加定义,然后在头文件中添加声明。
关联方式
- 手动关联:使用
connect()
函数将信号和槽关联(只有直接或间接继承了QObject类,才能使用connect()函数将信号和槽关联),4个参数分别是发射信号的对象、发射的信号、接收信号的对象、要执行的槽函数。 - 自动关联:将关联函数整合到槽函数的命名中,将槽函数命名为
“on_发射信号的部件_信号名”
,如on_showChildButton_clicked()
。这样就可以去掉使用connect()
关联函数,会自动关联。
手动关联和自动关联的切换,Qt Creator提供了快捷设置的方法。选择槽函数右击,选择Refactor->Rename Symbol Under Cursor
(快捷键Ctrl+Shift+R),在出现的替换栏中输入自动关联的命名,点击Replace,源文件和头文件中相应的函数名都更改了。
自动关联的形式更便捷,使用Qt设计器直接生成的槽函数就是使用这种方式。但是对于不是使用Qt设计器添加的部件,就要在调用setupUI()
函数前面定义该部件,使用setObjectName()
函数指定部件的对象名,这样才能自动关联。