Bootstrap

Qt不同类之间参数的传递

一、信号槽方式

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、宏定义和函数指针不能用于信号和槽的参数,信号和槽也不能有缺省参数。

第一点:当信号与槽函数的参数数量相同时,它们参数类型要完全一致。
第二点:当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。
;