如何实现宏SIGNAL和SLOT作为函数QT

时间:2012-11-21 03:22:50

标签: c++ qt pointers macros

嗯,我想要的是实现像宏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来做到这一点?

感谢您提供任何帮助或建议。

1 个答案:

答案 0 :(得分:2)

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

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

如果你真的想要返回char指针,那么你必须保持QByteArray,例如将它添加到同一对象的QList成员变量中,这样当实例被破坏时它将被破坏。