錯誤的行爲我有一個問題,從一個類返回從兩個函數的const char*
,由於某種原因的第一個值是第二值的副本或一些值是不對的,但同時返回值是從不同的指針,在此情況下,兩個QMap
,下面是兩個函數的代碼:爲const char * Qt中
const char* SomeClass::getSignal(QString signalName)
{
QString signalsignature = this->signals.value(signalName);
signalsignature.prepend(QString::number(QSIGNAL_CODE));
QByteArray ba = signalsignature.toLatin1(); // i try toUTF8 and to Local8Bit
const char* signalformated = ba.constData();
return signalformated;
}
const char* SomeClass::getSlot(QString slotName)
{
QString slotsignature = this->slots.value(slotName);
slotsignature.prepend(QString::number(QSLOT_CODE));
QByteArray ba = slotsignature.toLatin1();
const char* slotformated = ba.constData();
return slotformated;
}
的和this->signals
是QMap<QString, QString>
該保存槽和信號簽名(somesignal(int)
或someslot(bool)
連鍵somesignal
,someslot
分別) 。
,我使用的接口,全部採用從它的其他功能工作正常,但使用這些功能這樣的使用是從DLL加載由QLibrary
類:
const char* signal = someclassinstance->getSignal(tr("clicked"));
const char* slot = someclassinstance->getSlot(tr("onclicked"));
cout << "connecting signal " << signal << " to slot " << slot << endl;
這告訴我:
connecting signal clicked to slot rc
和錯誤時,我使用的QObject ::連接
Object::connect: Use the SLOT or SIGNAL macro to connect NovaRadioButton:: rc
我填的是QMap
s是一些功能有:
signals.insert(methodname,QString(metamethod.signature()));
我不知道我做錯了,或者也許是Qt的函數中的錯誤從QString
,感謝您的幫助。
謝謝你,但不是另一種方式?我返回const char *因爲我用它的QObject ::連接(QObject *發射器,常量字符*信號,QObject *接收器,常量字符*槽);所以我想要的是在函數中模擬SIGNAL和SLOT宏,或者如果有另一種方式,我知道我可以返回一個QByteArray並使用.data(),但是如果可能,我想模擬一個SIGNAL和SLOT宏。 –
@DiegoFernandoMurilloValenci在評論中回答太複雜。發表一個新的問題:) –
是的,我做到了,謝謝[鏈接](http://stackoverflow.com/questions/13485841/how-to-implement-the-macros-signal-and-slot-as-功能-qt)的 –