在使用QT CREATOR的时候如果要为某一个控件添加事件和对应的事件响应,方法是选中控件然后右键选择“转到槽”,但是如果在VS中编译QT项目时控件是没有这个选项的,这时候就要手动添加。步骤如下:
1)在.h文件中添加对应的信号与槽,如:
init_diag类的.h 文件中有个信号定义:可以在private ,public,protect任何区域
signals:
void start_can(int dev_num,int can_num,int can_brt,int mode);
在对应的父窗口的.h中有个槽函数定义:
private slots:
void show_can_mesg(int dev_num,int can_num,int can_brt,int mode);
2)关联信号与槽:
connect(init_diag, SIGNAL(start_can(int, int, int, int )), this, SLOT(show_can_mesg(int , int , int , int)));
此处应该注意的是:信号与槽关联的时候只写书参数类型就可以,不要把变量也写出,写出变量就无法正确关联,程序运行不会报错,但是执行结果和预期的有差别
3)父窗口和子窗口用信号与槽实现信息交互的时候一定要注意,只有父窗口和子窗口都正确建立后才可以关联,否则编译不会出错,但是程序不能够按照预期的执行。正确示例1如下
QtGuiCAN::QtGuiCAN(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
init_diag = new QtGuiClass(this); //子窗口创建
connect(init_diag, SIGNAL(start_can(int, int, int, int )), this, SLOT(show_can_mesg(int , int , int , int))); //信号与槽关联
test();
}