Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过Qt信号/插槽传递struct适用于Qt5,但适用于Qt4。。。(功能签名问题)_C++_Qt - Fatal编程技术网

C++ 通过Qt信号/插槽传递struct适用于Qt5,但适用于Qt4。。。(功能签名问题)

C++ 通过Qt信号/插槽传递struct适用于Qt5,但适用于Qt4。。。(功能签名问题),c++,qt,C++,Qt,将应用程序从Qt5移植到Qt4时进行了以下替换: connect(_database, &Database::data, this, &DataProvider::store); 成为: connect(_database, SIGNAL(data(ParameterData)), this, SLOT(store(Database::ParameterData))); 信号和时隙参数格式通过QtCreator中的自动完成给出 它进行编译,但在执行时提供以下内容: QObje

将应用程序从Qt5移植到Qt4时进行了以下替换:

connect(_database, &Database::data, this, &DataProvider::store);
成为:

connect(_database, SIGNAL(data(ParameterData)), this, SLOT(store(Database::ParameterData)));
信号和时隙参数格式通过QtCreator中的自动完成给出

它进行编译,但在执行时提供以下内容:

QObject::connect: Incompatible sender/receiver arguments
        Database::data(ParameterData) --> DataProvider::store(Database::ParameterData)
这建议我将其修改为:

connect(_database, SIGNAL(data(Database::ParameterData)), this, SLOT(store(Database::ParameterData)));
再一次,它很滑稽。但现在给出:

Object::connect: No such signal Database::data(Database::ParameterData) in ..\plot\src\dataprovider.cpp:13
事实上,信号特征是:

void data(ParameterData data);
通过将信号签名修改为:

void data(Database::ParameterData data);
void store(ParameterData pd);
我尝试了另一种方法,将插槽的签名修改为:

void data(Database::ParameterData data);
void store(ParameterData pd);
并以这种方式进行连接:

connect(_database, SIGNAL(data(ParameterData)), this, SLOT(store(ParameterData)));
现在它甚至没有编译,编译器给出:

error: 'ParameterData' has not been declared
 void store(ParameterData pd);
            ^

是否有可能采用另一种方法?

您可以使用
使用Database::ParameterData
删除插槽签名中的
数据库::
,但我不知道您为什么要这样做。仔细检查signal和slot是否接受同一类的参数(您没有两个名为
ParameterData
的类,是吗?)我认为这是因为slot和signal宏需要相同的函数签名(这只是我在使用Qt4几个月后做的一个猜测),using指令可能会解决这个问题,不知道有没有更好的办法way@SingerOfTheFall,我尝试了
使用Database::ParameterData数据库不是命名空间
(?)。出于动机,我会说,它使连接更小(更优雅?)。不,当然没有两个
ParameterData
classes:)您可以在需要传递该类型参数的任何地方使用
Database::ParameterData