connect関数QT

図1に示すように、接続()関数は、シグナル関連溝を用いて実施されます。

注:シグナルとスロット機構を使用する唯一のQO bjectクラスとその派生クラス

2、関数プロトタイプ

static QMetaObject::Connection connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,const QObject *receiver, const QMetaMethod &method,
Qt::ConnectionType type = Qt::AutoConnection);

inline QMetaObject::Connection connect(const QObject *sender, const char *signal,const char *member, Qt::ConnectionType type = Qt::AutoConnection) const;

最初の関数で:後ろ例えばDLG、最初の信号パラメータターゲットを送信するステップと、第2のパラメータは、例えば、SIGNAL(dlgReturn(INT))の後ろに、送信される信号です。

第三のパラメータは、信号を受信する対象である、例えば、この後ろに、このことは、このパラメータはこの時点である場合コンポーネント、すなわちウィジェットが、それは、第三の関数のように、これにパラメータのデフォルト値を省略してもよいことを示しています。第四のパラメータは、例えば、実行される溝である
スロット(showValue(INT))の背後に、あなたは信号達成する信号に関連する信号を指定することができます。

例えば:

MyDialog *dlg=new MyDialog(this);//将对话框中的自定义信号与主界面中的自定义槽进行关联
connect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
dlg->show();

注意:

図1に示すように、グルーブの信号、パラメータ型のconst char型に変換されるSIGNAL()とSLOT()マクロは、でなければなりません*

2、あなたはスロットキーワード第四パラメータがスロット文を指定します使用する必要があります。

例えば:

private slots://槽的声明
void showValue(int value);
void on_label_linkActivated(const QString &link);

同じスレッドではないQT接続シグナルとスロット

信号にメインスレッドを送った、別のスレッドスロット機能は、数時間応答、問題は出ていません、それは間違ってここに5つのパラメータで初めて接続がNotesの下でそれを行うことに気づきました。

QTを接続するための接続信号とスロットは、プログラミングプロセスにおいて不可欠QT。実際には、5番目のパラメータを持っていますが、一般的に特別なニーズを満たすために、デフォルト値を使用して時刻を手動で設定する必要があるかもしれません。

QT :: AutoConnection:接続の値を使用する場合、デフォルト値は、信号伝送のタイプを決定します。同じスレッドでの送信者と受信者は、自動的にQtの:: DirectConnectionタイプを使用している場合。受信者と送信者がスレッドでない場合はQt :: QueuedConnectionの種類を自動的に使用されます。

Qtの:: DirectConnection:スロット機能は信号を直接スロット機能信号の送信者スレッドを実行するために送信されたときに呼び出されます。効果は、信号送信スロット位置に直接呼び出し関数のように見えます。より危険なマルチスレッド環境では、それはベンの崩壊を引き起こす可能性があります。

QT :: QueuedConnection:受信者は、スレッド、関数トラフランが受信機に信号を送ることはスレッドと呼ばれる時間にイベントループ制御背面のスロット機能。信号を送信した後、スロット機能は、直ちに呼び出される受信者の現在の機能が実行されるまで、イベントループに入った後、スロット関数が呼び出される待つことはありません。マルチスレッド環境では、一般的にこれを使用します。

Qtは:: BlockingQueuedConnectionは:Qtの:: QueuedConnectionと一致スロット機能のタイミングを呼び出すが、タンクは機能がなくなるまでスレッドがブロックされている信号を送信者に送信した後。送信者と受信者は、そうでないプログラムがデッドロックし、スレッドであってはなりません。これを必要とするかもしれ複数のスレッド間の機会が同期させる必要があります。

QT :: UniqueConnection:押すかによってこのフラグビット|フォー上記()と組み合わせて一緒。ときに、このフラグが設定され、信号がスロットに接続され、次いで繰り返すされたときに、接続が失敗します。それがあることを、複製接続を避けるために。

おすすめ

転載: www.cnblogs.com/schips/p/12537000.html