ソースコードを変更せずに各OSのプログラムをコンパイルするだけで、ほとんどの最新のオペレーティングシステムで、その助けを借りて書かれたソフトウェアを実行できます。 GUI要素からネットワーク、データベース、およびXMLを操作するためのクラスに至るまで、アプリケーションソフトウェアの開発に必要となる可能性のあるすべての基本クラスが含まれています。 Qtは完全にオブジェクト指向であり、簡単に拡張でき、コンポーネントプログラミング技術をサポートしています。
この記事では、Qt4ライブラリを使用して簡単なプログラム「Hello、World!」を作成する方法を示します。
開発環境
まず、開発環境を決めましょう。 個人的には、クロスプラットフォームIDEコード::ブロックを使用してプログラムを記述します(このIDEでのQt4の使用の詳細については、こちらを参照してください )。 EclipseでQtを操作するためのプラグインもあります。 Qt for MS Windowsの商用バージョンは、MSVSに統合できます。 プログラムは、任意のテキストエディターで作成し、コマンドラインからコンパイルすることもできます。
明確にするために、Qtプログラムを手動でコンパイルする方法を示します。
最初のプログラム
まず、任意のテキストエディターでファイルを作成し、main.cppなどの名前を付けます
次のように記述します。
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
#include <QtCore> #include <QtGui> int main( int argc, char * argv[]) { QApplication app(argc, argv); QDialog *dialog = new QDialog; QLabel *label = new QLabel(dialog); label->setText( "<font color=red>Hello, World!</font>" ); dialog->show(); return app.exec(); } * This source code was highlighted with Source Code Highlighter .
1行目と2行目に、メインクラスが配置されているQtヘッダーファイルを含めました。
4行目では、メイン関数を宣言しました。これは、プログラムの実行を開始するメイン関数です。 整数(プログラムの結果。すべてが正常な場合は0)を返し、入力として2つの変数(コマンドラインパラメーターの数とそれらが格納されている配列)を取ります。
5行目では、アプリケーションオブジェクトを作成します。 このオブジェクトにコマンドライン変数を渡します。
6行目では、ダイアログを作成します。これは、右上隅にタイトルとボタンがある長方形のグラフィカルウィンドウです。 ラベルを作成します(7行目)。 ラベルを作成するときに、その親になるダイアログへのポインタをコンストラクタに渡します。 親が削除されると、そのすべての子孫が自動的に削除されるため、非常に便利です。 次に、setText()関数を呼び出してラベルの碑文を設定します(8行目)。 例からわかるように、表示されたテキストにhtmlタグを使用できます。
9行目では、画面にラベル付きのダイアログボックスを表示します。
そして最後に、10行目で、オペレーティングシステムのアプリケーションのイベント処理サイクルを開始します。 オブジェクトの結果をプログラムの結果として返します。
編集
次に、作成したプログラムをコンパイルします。
main.cppファイルを保存したディレクトリに移動して、コマンドを実行しましょう
$ qmake -project
これにより、このディレクトリ内のすべてのソースコードファイルが自動的に含まれるQt4プロジェクトブランクが作成されます。 結果は、現在のディレクトリと拡張子.proのような名前のファイルです。 次のようになります。
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
SOURCES += main.cpp
ご覧のとおり、ソースファイルは自動的に追加されました。 コマンドを実行する
$ qmake
その結果、次のコマンドを実行してプログラムをコンパイルするために使用するMakefileを取得します。
$ make
コンパイルプロセスが終了するまで待機し、最初のプログラムを実行します。 次のようになります。
第二プログラム
作成されたウィンドウやその他のウィジェットを完全に制御するには、それらから派生したクラスを作成する必要があります。 派生クラスMyDialogを作成します。 QDialogクラスを親として使用します。 クラスの説明はヘッダーファイルmydialog.hに配置されます。
最初の4行には、使用するグラフィック要素に必要なヘッダーファイル(ダイアログ、ボタン、碑文、垂直レイアウトマネージャー)が含まれています。 大規模なプロジェクトで<QtGui>、<QtCore>などの大きなヘッダーファイルを使用することはお勧めしません。これにより、コンパイル時間が長くなります。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- #include <QDialog>
- #include <QPushButton>
- #include <QLabel>
- #include <QVBoxLayout>
- クラス MyDialog: public QDialog {
- Q_OBJECT
- 公開 :
- MyDialog(QWidget * parent = 0);
- };
6行目では、クラスをQDialogから派生したものとして定義しました。
次の行では、Q_OBJECTマクロを指定しました。このマクロは、このクラスが追加のQt機能(信号やスロットのシステムなど)を使用することをQtプリプロセッサに伝えます。
9行目では、ダイアログボックスのコンストラクターを示します。 入力パラメーターは1つだけです-親オブジェクトへのポインター(親がない場合は0)。
mydialog.cppファイルでクラスのコンストラクターを定義します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- #include "mydialog.h"
- MyDialog :: MyDialog(QWidget * parent):QDialog(parent){
- QVBoxLayout * layout = new QVBoxLayout( this );
- QLabel * label = new QLabel( this );
- label-> setText( "<font color = red> Hello、World!</ font>" );
- QPushButton * button = 新しい QPushButton( this );
- ボタン-> setText( "閉じる" );
- layout-> addWidget(label);
- レイアウト-> addWidget(ボタン);
- 接続(ボタン、信号(クリック())、 これ 、スロット(閉じる()));
- }
4行目では、追加されたすべてのウィジェットを自動的に垂直に表示するレイアウトマネージャーを作成します。 ラベルの作成は、前の例に似ています。
7行目と8行目で、ボタンを作成し、テキストを設定します。 次の2行で、ウィジェットをレイアウトマネージャーに追加して、ウィジェットが自動的に配置されるようにします。
11行目では、ボタンボタンのクリックされた信号(クリック)をダイアログボックスの閉じる()スロットに接続します。 各Qtオブジェクトは、他のオブジェクトのシグナルとスロットに接続できる独自のシグナルとスロットを持つことができ、プログラム要素間で通信できます。
main.cppファイルは次の形式を取ります。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- #include <QApplication>
- #include "mydialog.h"
- int main( int argc、 char * argv []){
- QApplicationアプリ(argc、argv);
- MyDialog * dialog = new MyDialog;
- dialog-> show();
- return app.exec();
- }
プロジェクトチームを再作成します
$ qmake -project
新しいファイルが自動的に追加され、コンパイルされます。 これが、新しいプログラムの外観です。
第三プログラム
ダイアログボックスに多くのグラフィック要素が含まれている場合、そのようなウィンドウの作成はかなり面倒です。 このプロセスを簡素化するために、Qt Designerと呼ばれるツールがあります。 実行する
$ designer
ボタンなしのダイアログボックスを作成することを選択します。 ラベルとボタンを追加して、テキストを編集します。 Signal / Slot Editorツールを使用して、ボタンbuttonのクリックされた()の信号をダイアログボックスのclose()スロットに接続します。 レイアウトマネージャーを使用して垂直に配置します。 結果のファイルをmydialog.uiとして保存します。 後で、ui_mydialog.hという名前のヘッダーファイルに自動的に変換されます。
mydialog.hダイアログボックスのヘッダーファイルを次のように変更します。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- #include "ui_mydialog.h"
- クラス MyDialog: public QDialog、 public Ui :: Dialog {
- Q_OBJECT
- 公開 :
- MyDialog(QWidget * parent = 0);
- };
その中のすべてのヘッダーファイルは「ui_mydialog.h」に置き換えられ、継承は複数になります。
コンストラクタは大幅に簡素化されています。
*このソースコードは、 ソースコードハイライターで強調表示されました。
- #include "mydialog.h"
- MyDialog :: MyDialog(QWidget * parent):QDialog(parent){
- setupUi( これ );
- }
setupUi関数はui_mydialog.hヘッダーファイルで定義され、フォームを作成するルーチン全体を処理します
main.cppファイルは、2番目のプログラムと比較して変更されていません。
新しいファイルが自動的に追加され、コンパイルされるようにプロジェクトを再作成します。
おわりに
この記事では、Qt4を使用したC ++プログラミングの基本原則を示しました。 habrasocietyがこの出版物を好む場合、Qt4の使用に関する一連の出版物を続けます。