QT信号と共通の溝を使用してください

スロット機能を有する基準信号

いくつかの信号および機能のテンプレートスロットが書かれている、それだけで呼び出すことができます

ここでは、プログラムのウィンドウを閉じるには、ボタンのクリックは、

.hファイル

MYWIDGET_H #ifndefの
 に#define MYWIDGET_H 

の#include <QWidgetの> 
する#include <のQPushButton> クラスはMyWidget:公共QWidgetの
{ 
    Q_OBJECT     // 使用するために、その必要性のある信号を用いてタイムスロット公衆
    はMyWidget(QWidgetの *親= 0 );
    はMyWidget() ; 公共
    のQPushButton * pBtn1; 
}; #endifの// MYWIDGET_H








 

.cppファイル

#include " mywidget.h " 

はMyWidget ::はMyWidget(QWidgetの * 親)
    :はQWidget(親)
{ 
    pBtn1 = 新新のQPushButton(この); // 親オブジェクトを指定するか、またはウィンドウ上のボタンが正しく表示されない 
    pBtn1->のsetText (クローズ); // 閉じるボタンを作成 
    pBtn1->移動(100100);    // ウィンドウ上のボタンの位置を変更

    // 標準シグナルとスロットを使用して機能 
    (pBtn1、&のQPushButtonを接続::押下、この、&はMyWidget ::閉じる使用);
     / * pBtn1:信号の送信者、ポインタ型
     *とのQPushButton ::関数として信号を押下し、送信者およびクラス名:信号名
     *この:受信信号
     *&ウィジェット::近いスロット機能、信号処理機能; ::&許容されるクラス名スロット関数名
     * / 

} 

はMyWidget ::はMyWidget()
{ 

}

II。カスタムスロット機能

.hファイル

MYWIDGET_H #ifndefの
 に#define MYWIDGET_H 

の#include <QWidgetの> 
する#include <のQPushButton> クラスはMyWidget:公共QWidgetの
{ 
    Q_OBJECT     // 使用するために、その必要性のある信号を用いてタイムスロット公衆
    はMyWidget(QWidgetの *親= 0 );
    はMyWidget() ; 公共
    のQPushButton * pBtn1; 公共// 自己溝定義関数ボイドmyslot(); 
}; #endifの// MYWIDGET_H








    


 

.cppファイル

#include " mywidget.h " 


はMyWidget ::はMyWidget(QWidgetの * 親)
    :はQWidget(親)
{ 
    pBtn1 = 新新のQPushButton(この); // 親オブジェクトを指定するか、またはウィンドウ上のボタンが正しく表示されない 
    pBtn1->のsetText (" 閉じる使用"); // 閉じるボタンを作成 
    pBtn1->移動(100100);    // ウィンドウ上のボタンの位置を変更する

    接続(pBtn1、 のQPushButton ::押され、この、myslot);
     / * 自己溝定義関数: 
     * QT5:任意のメンバ関数、通常のグローバル関数、静的関数
     *は戻り信号値の関数として存在しないので、スロット関数値が返さなければなりません
     *一般QT5メンバ関数は、スロット関数として使用されるで
     * / 
} 


// メンバ関数が
無効にはMyWidgetを:: myslot()
{ 
    この - > クローズ(); 
} 

はMyWidget ::はMyWidget()
{ 

}

III。カスタム関数シグナルとスロット

以下は、子ウィンドウに切り替えるために、2つのウィンドウは、メインウィンドウのボタン、の切り替えの手順で、サブウィンドウボタンをクリックし、メイン信号にカスタムウィンドウを送信します。

mainwidget.hファイル

#ifndefのMAINWIDGET_H
 の#define MAINWIDGET_H 

の#include <QWidgetの> 
する#include <のQPushButton> 
の#include " subwidget.h " 

クラス MainWidget:公共QWidgetの
{ 
    Q_OBJECT 

公共
    MainWidget(QWidgetの *親= 0 )。
    MainWidget(); 

公共
    のQPushButton * pBtn1。
    サブウィジェットサブウィジェット。

公共無効ShowSubWidget();
    無効DealSubを();
    無効 DealSubWin(int型、のQString)。

}。

#endifの // MAINWIDGET_H

mainwidget.cppファイル

#include " mainwidget.h " 
の#include <QDebug> 

MainWidget :: MainWidget(QWidgetの * 親)
    :QWidgetの(親)
{ 
    この - > setWindowTitle(" メインウィンドウ" ); 

    pBtn1 = 新しい新規のQPushButton(" サブウィンドウにスイッチ"); 
    pBtn1 - >移動(100100 ); 

    // サブウインドウ表示するボタンをクリック 
    接続(pBtn1、のQPushButton ::&押され、この、ShowSubWidgetを); 

    // 信号処理サブウインドウ送信

    // 信号パラメータなし
    無効(サブウィジェット:: * funSignal)()=&サブウィジェット:: mySignal。
    (接続&サブウィジェット、funSignal、この、DealSub)。

    // 带有参数的信号
    のボイド(サブウィジェット:: *テスト信号)(int型、QStringの)=&サブウィジェット:: mySignal。
    (接続&サブウィジェット、テスト信号、この、DealSubWin)。


} 

MainWidget ::MainWidget()
{ 

} 

ボイドMainWidget :: ShowSubWidget()
{ 
    subWidget.show()。
} 

ボイドMainWidget :: DealSub()
{ 
    subWidget.hide()。
    この - > ショー();
}

無効 MainWidgetを:: DealSubWin(INT 、QStringのSTR)
{ 
    qDebug() << 
    qDebug() << str.toUtf8()データ()。
}

subwidget.hファイル

SUBWIDGET_H #ifndefの
 に#define SUBWIDGET_H 

の#include <QWidgetの> 
する#include <のQPushButton> クラスのサブウィジェット:公共QWidgetの
{ 
    Q_OBJECTの公共明示的なサブウィジェット(QWidgetの*親= 0 ); 
シグナル:// カスタム信号/ * 信号の戻り値ではなく、パラメータを有することができる
     *信号は、単に宣言、定義する必要関数を宣言しないことではありません
     EMITを使用して* mysignalの
     信号がオーバーロードすることができます* * / 無効)(mysignalを; // 何のパラメータ信号ボイド mysignal(int型、QStringの); // パラメータがあります信号公衆




    
    
     
    
    

スロット:

公共
    のQPushButton * PBTN; 

公共// カスタム関数溝
    のボイドsendSlot(); 

}; 

#endifの // SUBWIDGET_H

subwidget.cppファイル

#include " subwidget.h " 

サブウィジェット::サブウィジェット(QWidgetの * 親):QWidgetの(親)
{ 
    この - > setWindowTitle(" サブウィンドウ" ); 

    PBTN = 新しい新規のQPushButton(" スイッチメインウィンドウに"この); 
    PBTN - >移動(100100 )、

    接続(PBTN、 のQPushButton ::クリックされた、この、sendSlotが); 
} 

無効サブウィジェットを:: sendSlot()
{ 
    // ボタンが押されると、メインウィンドウの子ウィンドウに信号を送信する
 100     (mySignalを放出します) ;
    mysignal EMIT( " 私は子ウィンドウです" ); 
}

 

おすすめ

転載: www.cnblogs.com/QingYiShouJiuRen/p/11442060.html