シグナル(信号)と溝(スロット)の例では、接続信号のスロットを有するC ++ 11のラムダ式を使用して、重要な機構QTあります。
ハンドオーバを達成するために互いに二つのウィンドウは、ボタンをクリックして完了し、送信信号のみサブウインドウを見て、扱うことができない、すべての信号処理機能は、メインプロセスウィンドウ定義に対応する溝であるべきです。
メインウィンドウ:
mywidget.h
#ifndefのMYWIDGET_H
の#define MYWIDGET_H
の#include <QWidgetの> する#include <のQPushButton> の#include " win_1.h " クラスはMyWidget:公共QWidgetの { Q_OBJECTの 公共: はMyWidget(QWidgetの *親= 0 )。 〜はMyWidget();
空on_b1_clicked(); 空on_b3_clicked(); 空work_s1(); 無効 work_s2(int型、QStringの); プライベート: のQPushButtonのB1、 * B2、B3; ワットwin_1; }。 #endifの // MYWIDGET_H
mywidget.cpp
#include "mywidget.h"
書式#include <QDebug>
MyWidget ::はMyWidget(QWidgetの * 親) :はQWidget(親) { b1.setParent(この); b1.setText(" 按钮1 " )。 b1.move(100、100 )。 B2 = 新しいのQPushButton(この); // B2->のsetParent(この); B2->のsetText(" 按钮2 " )。
(B2、接続&のQPushButton ::クリックした、この、&はMyWidget ::近いです)。接続(&B1、&のQPushButton ::クリックした、この、&はMyWidget :: on_b1_clicked)。(接続&B1、&のQPushButton ::クリック、B2、&はMyWidget ::非表示)。
setWindowTitle(" 窗口1 " )。 b3.setParent(この); b3.setText(" 转到窗口2 " )。 b3.move(200、200 )。 接続(&B3、&のQPushButton ::クリックした、この、&はMyWidget :: on_b3_clicked)。 無効(win_1 :: * signal_01)()=&:: signal_0 win_1; 無効(* :: win_1 signal_02)(int型、QStringの)=&win_1 :: signal_0; 接続(&W、signal_01、この、&はMyWidget :: work_s1); 接続(&W、signal_02、この、&はMyWidget work_s2::); // ラムダ式は、読み取り専用、.PROファイルに配置されたC ++ 11留意 // =値は、すべての外部のメンバーが渡さ // このクラスは、すべてのメンバーが値によって渡される // &外入ってくるすべての参照 のQPushButton * B4 = 新新のQPushButton(この;) B4 >のsetText( - " LAMBDA式" ); B4 - >移動(400、400 ); int型 A = 10 ; 接続(B4、 &のQPushButton ::クリック、 [ =](BOOL BB)可変// 値を変更するには、変更可能な追加する必要 { B4 - >のsetText(" ラムダ式を" )。 ++ ; qDebug() << " 成功!!! " << << BB; } ); //設定されたサイズ、ウィンドウサイズは切り替えないように変更され 、リサイズ(600、480 );
} のボイドはMyWidget :: on_b1_clicked (){ b1.setText(" 我是按钮1 " )。 } ボイドはMyWidget :: on_b3_clicked(){ この - > 非表示()。 w.show(); } ボイドはMyWidget :: work_s1(){ w.hide()。 公演(); } ボイドはMyWidget :: work_s2(int型I、QStringのS){ qDebug() << I << s.toUtf8()データ()。 } はMyWidget ::〜はMyWidget() { }
子ウィンドウ:
win_1.h
#ifndefのWIN_1_H の#define WIN_1_H の#include <QWidgetの> する#include <のQPushButton> クラス win_1:公共QWidgetの { Q_OBJECTの公共: 明示 win_1(QWidgetの*親= nullptr)。 空send_s1(); 信号:無効signal_0(); //不带参信号 のボイド signal_0(int型、QStringの); //带参信号公共スロット:プライベート: のQPushButtonのB1; }。#endifの// WIN_1_H
win_1.cpp
#include " win_1.h " win_1 :: win_1(QWidgetの * 親):QWidgetの(親) { setWindowTitle(" 窗口2 " )。 b1.setParent(この); b1.setText(" 转到窗口1 " )。 (接続&B1、&のQPushButton ::クリックした、この、&win_1 :: send_s1)。 リサイズ(600、480 )。 } ボイドwin_1 :: send_s1(){ )(signal_0を発します。 放射signal_0(250、" 转到窗口1 " )。 }