VSQT 联编无转到槽选项--VS2019中使用QT建立信号和槽函数连接
半自动化
用惯了转到槽函数肯定对此难以适应,觉得特别麻烦。其实我们有相对简洁的方法。
仅需要规范命名即可!
例如,我需要添加一个 pushButton 的点击事件:
// xxx.h
private slots:
void on_pushButton_DigitalIO_clicked();
// xxx.cpp
void xxxx::on_pushButton_DigitalIO_clicked(){
//...
}
发现该方法源于一次意外,自定义槽函数始终调用两次,而信号只发送了一次。最终发现是槽函数名问题。
于是我开始思考,我们点击转到槽,QT Creator
为我们做了什么?
先说结论,Qt Creator
会 帮我们生成特定格式命名的槽函数;编译时,根据命名规则在内部进行 connect
。
具体为:
- 修改
ui文件
,编译生成ui_xxxx.h
ui_xxxx.h
中包含setupUint( )
函数,该函数末尾一定存在QMetaObject::connectSlotsByName(HardwareControl)
让我们看就 Qt
官方文档的解释:
该函数会递归搜索给定对象的所有子对象,并将来自它们的匹配信号连接到遵循一定规则的对象槽。
按照该规则,我们只需要定义好以下槽函数即可,connect
就让 Qt
去完成吧~
void on_<object name>_<signal name>(<signal parameters>);
1、以按钮为例,首先添加一个按钮,对象名为pushButton,在按钮是右键单击选择“转到槽”即可,在转到槽选择面板(右图)里面选择需要进行的操作,比如单击clicked()
2、选择菜单“编辑”,找到Edit Signals/Slots,或者在工具栏中找到第二项(第二张图),然后拖动按钮并释放,
弹出“配置连接”选项,选择需要进行的操作即可。
3、自定义:以按钮为例,使用connect
在头文件中添加:
private slots:
void on_button1_clicked();
在.cpp文件下面的构造函数中添加:
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_button1_clicked()));
接着实现槽函数即可。
4、不用写connect:
Qt信号和槽函数的命名是有规则的,组成为on_对象名_信号,以按钮为例,如果对象名为pushButton,在你在写槽函数的时候按照这种规则,则
在头文件中添加:
private slots:
void on_pushButton_clicked();
在.cpp文件下面的构造函数中就不用写connect了,直接写槽函数的实现就能实现信号和槽的连接。