如何实现宏SIGNAL和SLOT作为功能QT(how to implement the macros

2019-10-28 13:30发布

嗯,我想是实现工作方式类似于宏SIGNAL和SLOT但我自己的实现的功能,因此我们的目标是函数(或我自己的宏,如果我可以创建一个)收到这样的字符串参数“mycustomsignal”他返回一个const char *“2mycustomsignal(双,INT)”,让我这样做使用商店QMAP这asociation QMAP <“信号名称”,“信号签名”>,我填补它在另一个功能。

在这种情况下我QMAP是this->signals ,所以我搜索签名“mycustomsignal(东西)”与按键“mycustomsignal”和前置一个的QObject ::连接承认信号的代码,我得到“2mycustomsignal(东西)”,所以我转换它为const char *,因为的QObject ::连接具有这种格式的这个参数,我想在SIGNAL和SLOT宏这样的连词也使用:

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

我用的是(仅适用于undertand我做什么)的功能:

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
}

但这返回一个指针到本地和数据源函数结束时被销毁,所以我可以如何与功能或创建自己的MACRO做到这一点?

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

Answer 1:

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

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

如果你真的想返回字符指针,那么你必须将它添加到同一个对象的的QList成员变量保持的QByteArray左右,例如,因此,当实例被破坏它会被破坏。



文章来源: how to implement the macros SIGNAL and SLOT as functions QT