嗯,我想要的是实现像宏SIGNAL和SLOT一样的函数,但是我自己的实现,所以目标是函数(或我自己的宏,如果我可以创建它)接收像String这样的参数“mycustomsignal”并且他返回一个const char *“2mycustomsignal(double,int)”,所以我使用QMap来存储这个asociation QMap<“信号名称”,“信号签名”>,我把它填入另一个函数。
在这种情况下,我的QMap是this->signals
所以我使用键“mycustomsignal”搜索签名“mycustomsignal(something)”,并在前面添加QObject :: connect识别信号的代码,然后我得到“2mycustomsignal”(某物) )“所以我在const char *中转换它,因为QObject :: connect在这种格式中有这个参数,我也想和SIGNAL和SLOT MACROS一起使用,如下所示:
QObject::connect(customwidget, customwidget->getSignal("somesignal"),
somewidget, SLOT(someslot()));
我使用的功能是(仅适用于我所做的事情):
const char* SomeClass::getSignal(QString signalName) {
QString signalsignature = this->signals.value(signalName);
signalsignature.prepend(QString::number(QSIGNAL_CODE));
QByteArray ba = signalsignature.toLatin1();
return signalformated; //Here is the lost of data because QByteArray only exist in the function
}
但是这会返回一个指向local的指针,当函数结束时会破坏数据源,那么我如何使用函数或创建自己的MACRO来做到这一点?
感谢您提供任何帮助或建议。
答案 0 :(得分:2)
您必须从方法return ba;
返回QByteArray,然后从返回值中获取const char*
:
QObject::connect(customwidget, customwidget->getSignal("somesignal").constData(),
somewidget, SLOT(someslot()));
如果你真的想要返回char指针,那么你必须保持QByteArray,例如将它添加到同一对象的QList成员变量中,这样当实例被破坏时它将被破坏。