初日の2019年10月4日にQT研究
// https://www.devbean.net/2012/08/qt-study-road-2-catelog/から教材の一部(共有するためのおかげで)およびC ++ GUI QT4プログラミング
1.Hello、Qtの
#include <はQApplication> の#include <QLabel> int型のmain(int型 ARGC、チャー * ARGV []) { はQApplicationアプリ(ARGC、ARGV)。 QLabelラベル(" こんにちは、世界" ); label.show(); 戻るapp.exec(); }
2.信号溝
// !!! QT 5 の#include <はQApplication> の#include <のQPushButton> int型のmain(int型 ARGC、CHAR * ARGV []) { はQApplicationアプリ(ARGC、ARGV)。 QPushButtonボタン(" 終了" ); QObject ::接続(&ボタン、&のQPushButton ::クリック、&はQApplication ::終了)。 button.show(); 戻るapp.exec(); }
QObjectの周り::接続()5(送信者、信号、受信機、スロット)オーバーロード機能を接続; //は、信号源、信号、受信機機能です。
接続接続:: QMetaObject(CONST QObjectを*、CONST のchar * 、 CONST QObjectを*、CONST のchar * 、 Qtの:: CONNECTIONTYPE); //この関数は、文字列としての信号及びスロットう。 ::コネクション接続QMetaObject(constの QObjectを*、constの QMetaMethod& 、 constの QObjectを*、constの QMetaMethod& 、 Qtの:: CONNECTIONTYPE); //私たちはQMetaMethodの各サブクラスの関数として見ることができます。 ::コネクション接続QMetaObject(のconst* QObjectを、constの char型 * 、 constの char型 * 、 Qtの:: CONNECTIONTYPE)のconst ; //欠けている受信機。実際には、受信機として、この関数ポインタである QMetaObject ::接続(接続CONST QObjectを* 、PointerToMemberFunction、 CONST QObjectを* 、PointerToMemberFunction、 Qtの:: CONNECTIONTYPE)//シグナルとスロットタイプは、メンバ関数ポインタへのポインタである QMetaObject ::接続が接続します(CONSTにQObject * 、PointerToMemberFunction、 ファンクタ); //最初の2つのパラメータが異なっていない、最後の引数は、静的関数、グローバル関数とラムダ式を受け入れることができます。
当社の信号スロットconnect()
機能は、第五、最後のパラメータは明確に大型の使用であるQApplication
静的関数quit()
。それは、ボタンは我々が送信されたときに、あるclicked()
信号を、それが呼び出す機能、プログラムが終了します。QApplication
quit()
ラムダ溝を使用して、機能完了信号
// !!! QT 5 の#include <はQApplication> の#include <のQPushButton> の#include <QDebug> int型のmain(int型 ARGC、CHAR * ARGV []) { はQApplicationアプリ(ARGC、ARGV)。 QPushButtonボタン(" 終了" ); QObject ::(接続のQPushButton&、&ボタン::クリック、[](BOOLが){ qDebug() << " あなたは私をクリック!" ; }); button.show(); 戻るapp.exec(); }
ので、ラムダ式は、ブール引数を受け取ることに注意信号は、実際のパラメータです。ラムダ式は、同様の、後ろの標準出力に出力される文字列。QPushButton
clicked()
qDebug()
cout
connect関数でQt4を:
BOOL(接続constの QObjectを*、constの char型 * 、 constの QObjectを*、constの char型 * 、 Qtの:: CONNECTIONTYPEを)。 BOOL(接続constの QObjectを*、constの QMetaMethod& 、 constの QObjectを*、constの QMetaMethod& 、 Qtの:: CONNECTIONTYPEを)。 ブール接続(constの QObjectを*、constの char型 * 、 constの char型 *、 Qtの:: CONNECTIONTYPE)のconst
// !!! QT 4 の#include <はQApplication> の#include <のQPushButton> int型のmain(int型 ARGC、CHAR * ARGV []) { はQApplicationアプリ(ARGC、ARGV)。 QPushButtonボタン(" 終了" ); QObject ::接続(&ボタン、SIGNALは())(クリック、 &アプリ、SLOT(終了())); button.show(); 戻るapp.exec(); }
//我々が使用SIGNAL
し、SLOT
これらの二つのマクロは、2つの関数は、文字列に変換した、それも注意しquit()
ているQApplication
静的な機能に加えて、オブジェクトへのポインタを渡す必要があります。これはまた、文法4の制限にQtのシグナルとスロットです。また、我々は注意connect()
信号とスロットの関数は、文字列がかかりますので、渡されたグローバル関数やラムダ式にはできませんconnect()
。接続はケースが表示され、Qtの4は、コンパイルエラーではありません失敗したら(全てが文字列であるため、コンパイル時のチェックは文字列が一致するかどうかではない)が、実行時にエラーが発生します。これは間違いなく、プログラムの不安定性を増加します。
3.ウィンドウのレイアウト
#include <はQApplication> の#include <a QHBoxLayout基the> の#include <a QSlider> の#include <a QSpinBox> INTメイン(int型 ARGC、CHAR * ARGV []) { はQApplicationアプリ(ARGC、ARGV); QWidgetの *ウィンドウ= 新しい新しい QWidgetの; // メインウィンドウとしてQWidgetのオブジェクト ウィンドウ- > setWindowTitle(「!あなたの年齢を入力してください」;) QSpinBox * =スピンボックスの新しい新しい QSpinBox; // 自動的にウィンドウのサブクラスがオブジェクトを設定システム QSlider *スライダー= 新しい新しいQSliderを、 スピンボックス- > setRange(0、130 ); スライダー - > setRange(0、130 ); QObject ::接続(スピン・ボックス、SIGNAL(のvalueChanged(int型))、スライダー、SLOT(のsetValue(int型))); // 同时设置 はQObject ::接続(スライダー、SIGNAL(のvalueChanged(int型))、スピンボックス、SLOT(のsetValue(int型))); スピンボックス - >のsetValue(20 )。 QHBoxLayout *レイアウト= 新しい QHBoxLayout。 // 设置布局 レイアウト- > addWidget(スピンボックス)。 // 增加窗口 レイアウト- >addWidget(スライダ); ウィンドウ - > setLayoutの(レイアウト); // レイアウトウィンドウマネージャを呼び出し ウィンドウ - > 表示(); 戻り(app.exec); }