vs2019开发Qt5,信号转到槽的实现技巧
使用vs2019开发Qt5时,无法像在Qt Creator中使用“转到槽”的命令。只能码代码连接信号与槽让我十分头疼。经过尝试,终于找到不错的技巧的能省去写connect的痛苦。这个技巧只在vs2019开发Qt5中使用过,至于其他版本尚未尝试和验证。
方法:在主窗口类中声明的“转到槽”式的槽,严格采用“on_QAction对象名称_方法名称"的命名方式
例子如下:
1.新建一个名为test的QtGui项目
2.用Qt设计器打开ui文件
3.在菜单栏中添加File项,并添加actionNew, actionOpen, actionSave三个QAction对象
4.将三个对象分别对应的“转到槽”方法,手动添加到主窗口类中。同时在方法的定义中用QMessageBox进行测试
test.h
private slots:
void on_actionNew_triggered(); // 点击
void on_actionOpen_Hovered(); // 错误命名
void on_action_Save_triggered(); // 错误命名
test.cpp
#include <qmessagebox.h>
void test::on_actionNew_triggered()
{
QMessageBox msgBox;
msgBox.setText(tr("New"));
msgBox.exec();
}
void test::on_actionOpen_Hovered()
{
QMessageBox msgBox;
msgBox.setText(tr("Open"));
msgBox.exec();
}
void test::on_action_Save_triggered()
{
QMessageBox msgBox;
msgBox.setText(tr("Save"));
msgBox.exec();
}
5.测试结果
当点击new标签时,弹出消息框显示“New”;对
其余标签操作时,无反应
6.对照试验:当把两个命名格式错误的函数名称改正后,即
void on_actionOpen_hovered(); // H改为h
void on_actionSave_triggered(); // action_Save改为actionSave
当鼠标悬浮在Open标签上时,弹出消息框显示“Open”;
当点击Save标签时,弹出消息框显示“Save”
总结:vs中无法使用“转到槽”命令确实麻烦,但这个意外的发现让手动做槽的过程方便许多,今后只需要通过Qt手册查询QAction的类方法,然后按照“on_QAction对象名称_方法名称"的命名方式定义槽函数就行了,也就多写两行代码的事(比起习惯了vs再用Qt Creator开发而言,性价比实在太高了)。
不过,对于子对话框类对象能否使用此方法我就不得而知了,目前尚未尝试过。但子对话框和主对话框的信号-槽编辑,已有现成且较好的方式,此处不再赘述。
备注:这个意外的发现可能是Qt5某个特性,以后有机会也许能直接在Qt手册里找到官方说明,现在先用着