チュートリアル:Qt Widgets アプリケーション
このチュートリアルでは、Qt Creator を使って小さな Qt アプリケーション Text Finder を作成する方法を説明します。これはQt UI Tools Text Finder の例の簡略版です。Qt Widgets Qt Designer を使って Qt ウィジェットからアプリケーションのユーザーインターフェイスを構築し、コードエディターを使って C++ でアプリケーションのロジックを記述します。

Text Finder プロジェクトを作成する
- File >New Project >Application (Qt) > にアクセスします。 Qt Widgets Application.

- Choose を選択してProject Location ダイアログを開きます。

- Name にTextFinder と入力します。
- Create in に、プロジェクト・ファイルのパスを入力します。例えば、
C:\Qt\examples。 - Next (Windows および Linux の場合)またはContinue (macOS の場合)を選択して、Define Build System ダイアログを開きます。

- Build system で、プロジェクトのビルドに使用するビルド・システムとしてCMakeを選択します。
- Next またはContinue を選択して、Class Information ダイアログを開きます。

- Class name で、クラス名としてTextFinderと入力します。
- Base class で QWidgetを選択します。
注: Header file 、Source file 、Form file は、クラス名に合わせて自動的に更新されます。
- Next またはContinue を選択して、Translation File ダイアログを開きます。

- Language では、アプリケーションを翻訳する予定の言語を選択できます。これでアプリケーションのローカリゼーション・サポートが設定されます。プロジェクトファイルを編集することで、後で他の言語を追加することができます。
- Next またはContinue を選択して、Kit Selection ダイアログを開きます。

- プロジェクトのビルドと実行キットを選択します。
- Next またはContinue を選択して、Project Management ダイアログを開きます。

- プロジェクトの設定を確認し、Finish (WindowsおよびLinuxの場合)またはDone (macOSの場合)を選択してプロジェクトを作成します。
注: プロジェクトはEdit モードで開き、これらの説明は非表示になります。これらの説明に戻るには、Help モードを開きます。
TextFinder プロジェクトには以下のファイルがあります:
main.cpptextfinder.htextfinder.cpptextfinder.uiCMakeLists.txt

.h と.cpp ファイルには、必要なボイラープレートコードが含まれています。
ビルドシステムとして CMake を選択した場合は、Qt Creator がCMakeLists.txt プロジェクトファイルを作成します。
足りない部分を補う
ユーザーインターフェースの設計から始め、足りないコードを埋めていきます。最後に、検索機能を追加します。
ユーザーインターフェースの設計

- Edit モードで、Projects ビューの
textfinder.uiファイルをダブルクリックして、統合されたQt Widgets Designer を起動します。 - 以下のウィジェットをフォームにドラッグします:
- Label (QLabel)
- Line Edit (QLineEdit)
- Push Button (QPushButton)

注: ウィジェットを簡単に見つけるには、Widget Box の上部にある検索ボックスを使用します。例えば、Label ウィジェットを見つけるには、label という単語を入力します。

- Label ウィジェットをダブルクリックし、Keyword と入力します。
- Push Button ウィジェットをダブルクリックし、テキストFind を入力します。
- Property Editor ビューで、objectName をfindButton に変更します。

- Ctrl+A(またはCmd+A)を選択してウィジェットを選択し、Lay out Horizontally (LinuxまたはWindowsではCtrl+H、macOSではCtrl+Shift+H)を選択して水平レイアウト(QHBoxLayout )を適用します。

- Text Edit ウィジェット (QTextEdit) をフォームにドラッグします。
- スクリーン・エリアを選択し、Lay out Vertically (またはCtrl+L)を選択して垂直レイアウト(QVBoxLayout )を適用する。

水平レイアウトと垂直レイアウトを適用することで、アプリケーションの UI がさまざまな画面サイズに対応します。
- ユーザーがFind ボタンを選択したときに find 関数を呼び出すには、Qt のシグナルとスロットのメカニズムを使用します。シグナルは特定のイベントが発生したときに発せられ、スロットは特定のシグナルに応答して呼び出される関数です。Qt Widgets には定義済みのシグナルとスロットがあり、Qt Widgets Designer から直接使用できます。find関数のスロットを追加するには
- Find ボタンを右クリックしてコンテキストメニューを開きます。
- Go to Slot >clicked() を選択し、OK を選択します。
これにより、プライベート・スロット
on_findButton_clicked()がヘッダー・ファイルtextfinder.hに追加され、プライベート関数TextFinder::on_findButton_clicked()がソース・ファイルtextfinder.cppに追加されます。
- Ctrl+S(またはCmd+S) を選択して変更を保存します。
Qt Widgets Designer でのフォーム設計の詳細については、Qt Widgets Designer Manual を参照してください。
ヘッダーファイルの完成
textfinder.h ファイルには、必要な #include、コンストラクタ、デストラクタ、およびUi オブジェクトがすでに含まれています。入力テキスト・ファイルの内容をQTextEdit に読み込んで表示するには、loadTextFile() というプライベート関数を追加する必要があります。
- Edit モードのProjects ビューで、
textfinder.hファイルをダブルクリックして編集用に開きます。 Ui::TextFinderポインタの後、privateセクションにプライベート関数を追加します:private slots: void on_findButton_clicked(); private: Ui::TextFinder *ui; void loadTextFile();
ソース・ファイルの完成
ヘッダー・ファイルが完成したので、ソース・ファイルtextfinder.cpp に移ります。
- Edit モードのProjects ビューで、
textfinder.cppファイルをダブルクリックして、編集用に開きます。 - QFile でテキスト・ファイルを読み込み、QTextStream で読み込み、QTextEdit::setPlainText() で
textEditに表示するコードを追加する:void TextFinder::loadTextFile() { QFile inputFile(":/input.txt"); inputFile.open(QIODevice::ReadOnly); QTextStream in(&inputFile); QString line = in.readAll(); inputFile.close(); ui->textEdit->setPlainText(line); QTextCursor cursor = ui->textEdit->textCursor(); cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1); }
- QFile とQTextStream を使用するには、次の #includes を
textfinder.cppに追加する:#include "./ui_textfinder.h" #include <QFile> #include <QTextStream>
on_findButton_clicked()スロットに、検索文字列を抽出するコードを追加し、QTextEdit::find() 関数を使用してテキスト・ファイル内の検索文字列を検索する:void TextFinder::on_findButton_clicked() { QString searchString = ui->lineEdit->text(); ui->textEdit->find(searchString, QTextDocument::FindWholeWords); }
- コンストラクタで
loadTextFile()を呼び出す行を追加する:
次のコード行は、uicが生成したui_textfinder.h ファイルのon_findButton_clicked() スロットを自動的に呼び出します:
QMetaObject::connectSlotsByName(TextFinder);
リソースファイルの作成
入力テキストファイルを埋め込むリソースファイル(.qrc)が必要です。入力ファイルは、テキストの段落がある.txt ファイルであれば何でもかまいません。input.txt というテキストファイルを作成し、textfinder フォルダに保存します。
リソースファイルを追加するには
- File >New File >Qt >Qt Resource File >Choose と進みます。

Choose the Location ダイアログが開きます。

- Name にtextfinder と入力します。
- Path にプロジェクトのパスを入力し、Next またはContinue を選択します。
Project Management ダイアログが開きます。

- Add to project で、TextFinder を選択し、Finish またはDone を選択して、ファイルをコード・エディターで開きます。
- Add Prefix を選択します。
- Prefix で、デフォルトの接頭辞をスラッシュ(/)に置き換えます。
- Add Files を選択し、
input.txtを見つけて追加します。
プロジェクト・ファイルにリソースを追加する
アプリケーションの実行時にテキスト・ファイルを表示するには、ウィザードが作成したCMakeLists.txt ファイルのソース・ファイルとしてリソース・ファイルを指定する必要があります:
set(PROJECT_SOURCES
main.cpp
textfinder.cpp
textfinder.h
textfinder.ui
${TS_FILES}
textfinder.qrc
)アプリケーションのビルドと実行
必要なファイルがすべて揃ったので、
(Run) を選択して、アプリケーションをビルドして実行します。
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.