C++ 通过Qt信号/插槽传递struct适用于Qt5,但适用于Qt4。。。(功能签名问题)
将应用程序从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
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
。