qtフレームワークでは、ほとんどのライブラリシグナルとスロットはポインタをパラメータとして使用します。私は、ポインタの代わりにパラメータとして参照を取るシグナルスロット "構造体"を作成すると、全体のパラメータがコピーされるか、通常のC++リファレンスのように4バイト(32ビットシステム)だけコピーされるのでしょうか?Qtシグナルとスロット:参照引数がコピーされていますか?
リファレンスパラメータで信号/スロットメソッドを作成したときに気が付いたので、これを尋ねます。私がconnect
のとき、QTCreatorのオートコンプリートメカニズムは、ポインタパラメータと同じように、リファレンスパラメータで私にヒントしません。彼は、私は定期的なパラメータで私をヒント。例えば:
...
signals:
void mySignal(int& parameter);
private slots:
void on_mySignal(int& parameter);
Iは、パラメータに参照のため&
を追加doesntのそれらとQtを接続しようとする:私は手動に変更する必要が
...
connect(this, SIGNAL(mySignal(int)), this, SLOT(on_mySignal(int)));
I信号及びスロットを作成します:
connect(this, SIGNAL(mySignal(int&)), this, SLOT(on_mySignal(int&)));
このように、私は信号が/ sロット?私はすべての助けに感謝します。
あなたの前提に欠陥があります。通常のC++参照はオブジェクトではないのでサイズはありません。たとえば、 'sizeof'を使って参照のサイズを取得することはできません。また、廃止されたシグナル/スロット構文の使用をやめてください。適切な構文は 'connect(this、&Class :: mySignal、this、&Class :: on_mySignal);'です。これにより、心配する必要はありません。 – nwp
ありがとうございます。しかし、主な質問に答えるには:参照信号/スロットを使用する場合は、コピーされているデータの大量ですか? – Bremen
'int 'を指定しても、' int'のコピーが必要です。スロットの引数に代入し、渡されたパラメータが変更されたかどうかを調べることで、それをテストすることができます。 – nwp