私はUbuntu 14.04でQt 4.8を使用しています。Qt:このコードのシグナル引数を正しく定義する方法は?
signals:
void newMessage(const QByteArray & newData);
か::(ヘッダファイル内)newMessage
信号を定義するための適切な方法だろう何
-
void MyServer::processMessage()
{
QByteArray data;
...
...
emit newMessage(data);
}
:
現在、私は次のコードを持っています
signals:
void newMessage(QByteArray newData);
上記のように、シグナルはを出る直前に放出されます関数であるため、シグナルを放出した直後にはQByteArray data
はもう存在しません...
シグナルを定義する最初の方法についての心配は、それが引数としてオブジェクト(インスタンス)への参照を渡すことですnewMessage
が放出された後はもう存在しません。
あなたの時間と忍耐力に感謝します!
ところで:私のアプリはシングルスレッドです。
PS:アプリがマルチスレッドであれば、状況は変わりますか?
私が正しく覚えていれば、QObjectはコピーできないので、値渡しすることはできません。今QObjectについて言及しました。 –
とにかく、ポインタまたは参照 - それはあまりにも重要ではありません値でデータオブジェクトを渡す必要はありません)。結局のところ、リファレンスは、自動間接指定を持つ定数ポインタ(コンパイラが*演算子を置く)として見ることができます。 –
しないでください。これはOPが心配していた問題(接続タイプが 'Qt :: QueuedConnection'だった場合)になります。 'QObject'は、通常はポインタ値によって渡されます。なぜなら、それらは値渡しできないからです(コピー可能ではありません)。 'QByteArray'は' QObject'ではなく、コピー可能であり、ポインタによって渡される理由はありません。 – Mike