一、信号槽方式
1: 在需要发送信号的子类增加一个信号函数
void set_send(double lonx, double laty);
sub.h
sub.cpp
emit set_send(lonx,laty);
2: 在需要接收信号的类增加一个槽函数
main.h
void set_rece(double lonx, double laty);
main.cpp
1)引入子类头文件
2)槽函数实现
void MainWindow::set_rece(double lonx, double laty)
{
qDebug()<<"set_rece"<<lonx<<laty;
}
3) 链接信号和槽
connect(setorigin_ui, &SetOrigin::set_send, this, &MainWindow::set_rece);
注意:因为要在子窗口打开时建立连接,所以connect放在打开子窗口按钮的槽函数内
二、 使用extern 定义全局变量(未试)
文件A在函数外:
int a = 10;
文件B在使用前:
extern int a;
这种方法不需要包含头文件
运行时出现报错“storage class specified for parameter lonx ”,因为刚开始将extern int args;变量声明在public下了,extern是存储类,然而未实例化的类不会给参数分配存储空间,因此应该将extern变量声明写在外侧,如下:
三、信号和槽知识补充
1、signals前面不可加public、private和protected进行修饰;slots前面可以加,因为Qt说槽函数可以当普通函数使用。
2、signals区域的函数必须是void类型,而且这些信号函数没有函数体,也就是说不可以自己定义这些信号函数,你只要声明它就够了,其它不用管,Qt内部自己弄。
3、宏定义和函数指针不能用于信号和槽的参数,信号和槽也不能有缺省参数。
第一点:当信号与槽函数的参数数量相同时,它们参数类型要完全一致。
第二点:当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。