0

さて、私が望むのは、マクロSIGNALおよびSLOTのように機能する関数を実装することですが、独自の実装を使用するため、関数(または作成できる場合は独自のマクロ)が文字列「mycustomsignal」のようなパラメーターを受け取ることが目標です彼は const char* "2mycustomsignal(double,int)" を返すので、この関連付け QMap<"signal name","signal signature"> を格納するために QMap を使用して、別の関数に入力します。

この場合、私の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()));

本当にcharポインターを返したい場合は、たとえば同じオブジェクトのQListメンバー変数にQByteArrayを追加して、QByteArrayを保持する必要があります。これにより、インスタンスが破棄されたときに破棄されます。

于 2012-11-21T14:24:07.003 に答える