0

好吧,我想要的是实现像宏 SIGNAL 和 SLOT 一样工作的函数,但使用我自己的实现,所以目标是函数(或者我自己的宏,如果我可以创建它)接收像字符串“mycustomsignal”这样的参数他返回一个 const char* "2mycustomsignal(double,int)" 所以我使用 QMap 来存储这个关联 QMap<"signal name","signal signature">,我将它填充到另一个函数中。

在这种情况下,我的 QMap 是this->signals,所以我使用密钥“mycustomsignal”搜索签名“mycustomsignal(something)”并预先添加 QObject::connect 识别信号的代码,我得到“2mycustomsignal(something)”所以我将其转换为 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
}

但这会返回一个指向本地的指针,并且当函数结束时数据源被破坏,那么我如何使用函数或创建自己的宏来做到这一点?

感谢您的任何帮助或建议。

4

1 回答 1

2

您必须从您的方法返回 QByteArray return ba;,然后const char*从返回值中获取:

QObject::connect(customwidget, customwidget->getSignal("somesignal").constData(),
                 somewidget, SLOT(someslot()));

If you really want to return char pointer, then you have to keep the QByteArray around, for example by adding it to a QList member variable of the same object, so it will get destructed when the instance gets destructed.

于 2012-11-21T14:24:07.003 回答