目次

はじめに

本書のサンプルコード
サンプルの表記方法
注意
商標について
謝辞
動作環境

第1章 Qtの概要

1.1 Qtとは
1.2 QtのリリースVersion
1.3 Qtで作成できるもの
1.4 サポート最小C++ Version
1.5 次章からの記述ルール

第2章 開発環境の構築

2.1 Qtアカウント
2.2 インストール

第3章 HelloWorldで基本を学ぼう

3.1 CUIアプリでHelloWorld
3.2 GUIアプリでHelloWorld
3.3 オブジェクト管理について考える
3.4 トップレベルウィジェット

第4章 Qt Creator

4.1 画面説明
4.2 ファイルやクラスの追加(CMake限定)
4.3 ビルド
4.4 エディターの操作
4.5 リファクタリング
4.6 ショートカットキー
4.7 ヘルプを活用する

第5章 QObject

5.1 QObjectの作成方法
5.2 メモリー管理
5.3 シグナル・スロット
5.4 メタオブジェクトシステム
5.5 ビルド時の注意
5.6 ソースコード上のシグナル・スロットの定義方法
5.7 Qtに用意されているクラスのシグナルに接続する
5.8 独自にシグナルを定義する
5.9 シグナルとスロットの引数
5.10 プロパティーシステム

第6章 データの扱い方

6.1 STLとの関係
6.2 d-pointer
6.3 オブジェクト型のクラスと値型のクラス
6.4 Implicit Sharing
6.5 QVariant

第7章 コンテナ

7.1 順序付きコンテナ
7.2 連想コンテナ

第8章 uiファイルを使用する

8.1 プロジェクトウィザードで作成する
8.2 プロパティーエディターにおける初期値
8.3 uiファイル付きのウィジェット
8.4 シグナル・スロット接続
8.5 Designer上でシグナル・スロット接続
8.6 自作派生ウィジェットを使用する

第9章 ウィジェットの見た目を変更する

9.1 レイアウト
9.2 スタイル

第10章 デバッグログ

10.1 QString文字列の引用符を消したい
10.2 クラス名を表示したい
10.3 デバッグレベルを区別する
10.4 リリースビルド時のログレベルをカスタマイズする

第11章 ビルドシステム

11.1 Qtのビルド構成
11.2 qmake
11.3 CMake
11.4 Qt5 Core互換性APIを使用する

第12章 トップレベルウィジェット

12.1 QDialog
12.2 QMainWindow
12.3 最初からQMainWindowを登場させないワケ

第13章 シグナル・スロットを使いこなす

13.1 connect()関数の引数「Qt::ConnectionType」の意味
13.2 connect()関数のバリエーション
13.3 disconnect()関数の使い方
13.4 シグナル・スロットの特徴
13.5 デザインパターン的なものを考える

第14章 マルチスレッドの基礎

14.1 スレッドの処理パターン
14.2 Qtのマルチスレッド技術
14.3 QThread
14.4 QThreadPoolとQRunnable
14.5 Qt Concurrent

あとがき

はじめに

本書を手に取っていただき、ありがとうございます。

本書は、Qt5とQt6の両方のVersionに対応したQtの入門書です。コードはC++で記述し、画面はQt Widgetsベースで作成します。

本書は、下記のような方を想定しています。

 ・クラスプラットフォーム(マルチプラットフォーム)開発に興味がある

 ・Qtに興味がある

 ・UIプログラミングを体験してみたい

 ・C++はある程度わかる(はず…)

Qt6から使用できるようになった

 ・CMake

 ・C++プロパティーバインディング

 ・Qt Concurrentのプロミスモード

などの機能や、Qt5とQt6で仕様差分がある機能についても触れています。

本書を読んで、少しでもQtに興味を持っていただければ幸いです。

本書のサンプルコード

本書のサンプルコードは、GitHubの

 https://github.com/argama147/qt5qt6cppbook

に格納されています。本書に関するサポート情報も記述されています。ぜひご活用ください。

サンプルの表記方法


サンプル > ch03 > HelloWorld


は、サンプルコードの場所が


[サンプルコードのトップディレクトリーのパス]/ch03/HelloWorld


にあることを示しています。

「サンプル」というディレクトリーがあるわけではありません。

プロジェクトファイルやソースファイルのパスには、日本語が含まれているとコンパイルエラーの原因となります。日本語をパスに含めないようご注意ください。

注意

 ・本書は、著者が独自に調査した結果を出版したものです。

 ・できるだけ自分の開発環境で動作検証し、ソースコード自身を確認し、万全を期して作成したつもりですが、ご不明な点なども出てくるかと思います。その場合、Twitterで「@argama147」に対してメッセージを送っていただくか、GitHubのIssueにコメントいただければ何らかのフォローができるかもしれません。ただし、ものぐさな筆者のため、回答が返せない場合もあるかと思いますので、その点はどうぞご承知ください。

 ・本書の内容に関して、なんらかの保証をするものではなく、内容やサンプルプログラムに基づくいかなる運用結果に関しても、いっさいの責任を負いませんし、負えません。

 ・本書に記載されたURLやソフトウェアの内容は、将来予告なく変更される場合があります。

商標について

本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

謝辞

本書を商業出版する機会をいただいた、インプレスR&D山城様に感謝します。とてもキュートな表紙を作成していただいた二十四番町様に感謝します。そして、本書を手にとってくれたあなたに感謝します。

動作環境

筆者が動作確認した環境です。

 ・OS

  ─Windows10 Pro

 ・ビルドキット

  ─Qt5.15.2 MinGW 64-bit

  ─Qt6.2.1 MinGW 64-bit

 ・Qt Creator

  ─Version:5.0.3

第1章 Qtの概要

本章はQtの概要について説明します。

1.1 Qtとは

 Qt(キュートと読む)は、デスクトップ向けのOSであるWindows、Linux、macOSやモバイル向けOSであるAndroidやiOSに対応しているクロスプラットフォームのアプリケーション開発プラットフォームです。1

 プログラムコードを変更することなく、それぞれのOSの環境でそのままビルドし、実行することができます。「プログラムコードを変更せずに」複数のOSで動作する、というところが大変魅力的で、Windows版とLinux版を同時開発する、といったことが可能になるため、ビジネス的にも優れているプラットフォームです。

1.2 QtのリリースVersion

 Qt5とQt6のリリースVersionについて説明します。Qt5は、Qt5.0が2012年12月にリリースされ、それから約半年ごとにfeature releaseとしてバージョンがひとつずつ上がり、2020年5月に5.15LTSが最終リリースされました。LTSはLong-Term-Supportedの略で、商用ライセンス所有者に3年間の長期サポートが提供される安定したVersionになっています。Qt5では5.6、5.9、5.12、5.15の計4回、LTSリリースがありました。製品で利用する場合は基本的にLTSが付いているVersionを使用し、バグ等の修正がFIXされる必要があるなどの場合のみ、LTS以外のVersionを利用するのがよいと思います。

 2020年12月にメジャーバージョンのアップグレードとして、Qt6.0がリリースされました。本書の執筆時点(2021年11月)では、最新VersionはQt6.2LTSになります。Qt6.0とQt6.1は、Qt5.15LTSと比べると一部の機能が削除された形でリリースされています。Qt6.1とQt6.2で段階的にモジュールが追加されました。モジュールの構成的に、モバイル向けOSについては実質的にQt6.2LTSからの対応と考えた方がよさそうです。今後Qt6.3が2022年3月、Qt6.4が2022年9月、Qt6.5LTSが2023年3月にリリースされる予定です。Qtにどのようなモジュールがあるかは、https://doc.qt.io/qt.htmlを参照してください。


2021年のロードマップ2から、Qt6.0からQt6.2LTSまでのリリースモジュールについて記述します。


■ Qt6.0に含まれているモジュール

Qt Concurrent / Qt Core / Qt Core Compatibility APIs / Qt D-Bus / Qt GUI / Qt Help / Qt Network / Qt OpenGL / Qt Print Support / Qt QML / Qt Quick / Qt Quick 3D / Qt Quick Controls / Qt Quick Layouts / Qt Quick Timeline / Qt Quick Widgets / Qt Shader Tools / Qt SQL / Qt SVG / Qt Test / Qt UI Tools / Qt Wayland / Qt Wayland Compositor / Qt Widgets / Qt XML / Qt 3D / Qt Image Formats / Qt Network Authorization / M2M package: Qt CoAP / M2M package: Qt MQTT / M2M package: Qt OpcUA


■ Qt6.1から追加されたモジュール

Active Qt / Qt Data Visualization / Qt Charts/ Qt State Machines/ Qt Lottie/ Qt Virtual Keyboard/ Qt for Device Creation: Qt Device Utilities/ Compatibility: Qt Graphical Effects


■ Qt6.2LTSから追加されたモジュール

Qt Bluetooth / Qt Multimedia / Qt Positioning / Qt Quick Dialogs / Qt Remote Objects / Qt Sensors / Qt SerialBus / Qt SerialPort / Qt WebChannel / Qt WebEngine / Qt WebSockets / Qt WebView / Qt NFC / Qt Application Manager / Qt Interface Framework(旧称Qt IVI)


 製品などに使用されるQtのVersionは、現時点ではまだQt5が主流(Qt4以下が現役で使用されている場合も多々ある)ですが、Qt5とQt6の基本的な部分についてはほとんど変わりありません。本書ではQt Core、Qt Widgets、Qt Concurrent、Qt GUIのモジュールを中心に解説しています。本書はQt6.2LTS対応となっています。

1.3 Qtで作成できるもの

図1.1: Qtで作成できるもの

Qtは、大きく分けてアプリケーション(以下、アプリと呼ぶ)とライブラリーが作成できます。アプリには画面なしのCUIアプリと画面ありのGUIアプリがあります。GUIアプリにはQt Widgetsと呼ばれるアプリとQt Quickと呼ばれるアプリがあります。ライブラリーは、C++ Library、Qt Quick 2 Extention Plugin、Qt Creator Pluginがあります。

 「Qt Widgets」アプリは主にデスクトップOS向けで、Visual Studioなど他のデスクトップ向けIDE(統合開発環境)の画面作成方法と似たような感覚でアプリケーションを開発できます。C++のコードだけでも作成できますが、「Qt Designer」という画面デザインツールで作成されたuiファイルをあわせて使用することで、より簡単に、より直観的に画面を作成することができます。

 「Qt Quick」は、AndroidやiOSなどのモバイル向けOSに適した画面を作成できます。「Qt Quick」はタッチ操作ができるデバイスで、ジェスチャー操作やアニメーション効果のあるUI作成に向いています。ただし、デスクトップ向けの画面が作成できないわけではありません。Qt5では従来のデスクトップアプリには不向きとされていました。しかしQt6では、デスクトップアプリに対するスタイルも追加されており、Qt開発側のデスクトップアプリでも「Qt Quick」で開発してほしいという思惑があるように見えます。Qt WidgetsとQt Quickそれぞれと、使用する言語についてまとめます。

※Qtは「Qt for Python」というPythonバインディングも用意されています。


■ 画⾯開発としてQt WidgetsとQt Quick、どちらを選択すべきか

「Qt Widgets」と「Qt Quick」では描画エンジンが全く異なるため、同じような画面要素を配置しても見た目(スタイル)が異なります。ただしQt6では、Qt6.0リリース時に「Qt Quick」のデスクトップ向けに新たなスタイルが提供されました。このスタイルは「Qt Widgets」と同じような見た目になるようデザインされています。3

この機能が、今後デスクトップ向け開発のスタンダードになっていくかは、まだなんともいえないところです。今後の普及次第でしょうか。「Qt Widgets」については、Qt6がリリースされた現在でもデスクトップ向けアプリ画面開発の即戦力として残り、少なくともQt6がリリースされている間は削除されないというQt公式のコメントがあります。筆者としては、Qtの学習初めは、Qt Widgetsアプリの開発方法をまず学ぶのがオススメです。Qt Designerを使用してuiファイルを作成すれば直観的に画面が作成でき、学習コストを低く抑えられるからです。「Qt Quick」は、QMLでの画面開発を学ぶ学習コストがQt Widgetsに比べると比較的高いですが、その代わり、ダイナミックな動きをさせる画面を作成できることが魅力的です。Qt開発チームも現在は「Qt Quick」に注力しているため、最新の機能は「Qt Quick」に搭載されやすい印象です。まず「Qt Widgets」、その後「Qt Quick」というように学習を進めるのがいいと思います。最初から画面(プレゼンテーションロジック)については「Qt Quick」に注力したいということであれば、本書の「Qt Widgets」の部分は必要最小限の学習にとどめ、画面以外の機能(ビジネスロジック)ついての学習を中心に読むとよいでしょう。

1.4 サポート最小C++ Version

 QtのVersionによって、C++の最小Versionが異なります。

 C++ Versionによって、Qtの機能が使えたり使えなかったりする場合があります。

1.5 次章からの記述ルール

 次章から、Qt6のみに対応した機能には[Qt6]と記述します。

第2章 開発環境の構築

 本章では、Qtの開発環境の構築について説明します。

2.1 Qtアカウント

QtをインストールするためにはQtのアカウントを作成する必要があります。WebブラウザーでQtのWebサイト(https://www.qt.io/download)を開きます。

図2.1: QtのWebサイト

右上の人型のアイコンを押下します。

図2.2: Qt Account入力

 1

アカウント名はEmailアドレスです。

Qtのアカウントを作成したことがない場合は「Create Qt Account」を選択し、アカウントを作成します。作成済みの場合は、フォームにアカウントとパスワードを入力し、「Sign in」ボタンを押下してログインできることを確認します。

2.2 インストール

 WebブラウザーでQtのWebサイト(https://www.qt.io/download)を開きます。

図2.3: インストール-Webサイト1

 Qtは「Commercial」(商用版)と「Open Source」(フリー版)がありますが、今回は「Open Source」を選択します。「Downloads for open source users」の「Go open source」を押下します。

図2.4: インストール-Webサイト2

 ページの下の方にある「Download the Qt Online installer」をクリックしてオンラインインストーラーをダウンロードし、実行します。インストーラーを実行すると、次のような画面になります。

※Windowsの画面で説明しますが、他のOSでも大して表示は変わりません。

図2.5: インストール-Welcome

作成したアカウントとパスワードを入力し「Next」ボタンを押下します。会社等でプロキシ設定が必要な場合は、左下のボタンを押下し、プロキシを設定します。

図2.6: インストール-Open Source Obligations

Qtのオープンソースに関する同意画面です。チェックはお好みで付け、「Next」ボタンを押下します。「company/businesss name」を入力する欄がありますが、特に入力しなくても問題なさそうです。

図2.7: インストール-Setup

 「Next」ボタンを押下します。

図2.8: インストール-Contribute to Qt Development

 「Next」ボタンを押下します。

図2.9: インストール-Installation Folder

 「Custom installation」と「Associate common file types with Qt Creator」にチェックを付け、「Next」ボタンを押下します。

図2.10: インストール-Select Components

Qtのコンポーネントを選択します。「Latest releases」だけチェックを付け、「Filter」ボタンを押下します。

図2.11: インストール-Select Components2

Qt6.2.1の「MinGW 8.1.0 64-bit」と「Qt 5 Compatibility Module」、Qt5.15.2の「MinGW 8.1.0 64-bit」にチェックを付け「Next」ボタンを押下します。もしハードディスクの容量やインストール時間的に余裕がある場合は、「Sources」もチェックを付けておくとよいでしょう(「Sources」はサイズが大きいです)。コンポーネントはあとでMaintenanceToolで変更可能です。2

ここではインストール時間を短くするため(Qt5とQt6両方を使用する環境として)最小の構成を選択しています。コンポーネントをたくさん選択した場合、インストールに半日以上掛かったりする場合もありますので、注意が必要です。

図2.12: インストール-License Agreement

Qtに関するいろいろなラインセンスの同意画面です。NinjaツールはCMakeを動かすのに必要なツールです。一番下のチェックを付け、「Next」ボタンを押下します。

図2.13: インストール-Start Menu shortcuts

「Next」ボタンを押下します。

図2.14: インストール-Ready to Install

「Install」ボタンを押下します。インストールが開始されます。

図2.15: インストール-完了

インストールの完了画面です。Finishボタンを押下すると、Qt Creatorが起動します。

以上で、インストールの説明は終了です。

1. 以前はQtアカウントは不要でしたが現在は必須です。

2. デフォルトではC:¥QtにMaintenanceToolがあります。

試し読みはここまでです。
この続きは、製品版でお楽しみください。