Qtプログラミング

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

プログラミング > Qtプログラミング


ライセンスの注意事項[編集]

Qtには、有償版ライセンスと、無償版ライセンスがある。

無償版Qtの場合のライセンスは、Linux界隈で普及しているGPLライセンスになる。

GPLはかなり制約の強いライセンスであり、GPLライセンスのアプリでは、販売・配布などする場合、絶対にソースコードを公開しなければならない。


インストールの方法[編集]

まず、開発環境および実行環境をインストールしなければならない。

LinuxにもWindowsにもQtは対応しているが、しかしインストール方法はLinuxとWindowsとでは違う。

まず、Linux版にしろWindows版にしろ、なるべくそれらのOSの既存のOS公式アプリケーションを流用しているので、まずはそれぞれのOSを更新しておいて、 OSがなるべく最新の状態になるようにアップデートしておく必要がある。

windows版の場合、Qtアプリの実行環境として、数十GB(ギガバイト)もの容量を占有するので(たとえば40GB以上)、Windowsインストールの際に、あらかじめそのぶんの容量を確保しておくこと。

もし、すでにインストール済みのパーティションの限界がそのQt実行環境の容量も小さいなら、次回のWindows再インストールのときまで見送って、それまでの間はLinuxで勉強しよう。

Linuxの場合、オープンソース版Qtなら 数百MB~1GB ていどでインストールできる。


Linux の場合[編集]

とりあえずLinuxでのインストール方法を説明する。


まず、qt5やqt4など実行環境として新らしめのバージョンのqtをインストールする。

Fedora系の場合(Fedora31 で確認ずみ)、

sudo dnf install qt5

deb系の場合(ubuntu20.04)

sudo apt install qt5

で入る。


また、Linux版のqtでは、実行環境と開発環境は別である。qt5-devel のような、語尾に -devel のついたのが開発環境アプリなので、それをインストールする必要がある。

sudo dnf install qt5-devel

で入る。


また、これとは別に、 qt-creator という、IDE(統合開発環境)で設定や編集などを行うアプリを入れる必要がある。

sudo dnf install qt-creator
sudo apt install qt-creator

qt-creator は、例えるなら Windowsでいうところの Visual Studio のような統合開発環境の、qtアプリ開発版の統合開発環境である。 この qt-creator が無いと、設定などの編集が(初心者には)ほぼ不可能になので、入れよう。


さて、Qt そのもののプログラミング言語は C++ で設計されており、Qtアプリを作るさいにも C++ の文法でプログラミングする。

LinuxではC++用コンパイラとしてgcc-C++ というのがあるが、しかし Linux には標準では gcc-C++ は入ってないので、インストールする必要がある。

sudo dnf install gcc-c++
sudo apt install build-essential

ただし、 qt-creator をインストールした際に、自動で gcc-c++ もインストールされている場合がある。

Linuxそのもののプログラミング言語はC++ではなく、標準C言語でLinuxは書かれている。なので、Linuxの多くのディストリビューションに初期状態で入っているコンパイラは、(C++に対応しておらず、標準C言語にだけ対応しているコンパイラである) GCCである。


Linux版 Qt では、この gcc-C++ をコンパイラとして流用している。


また、qtにかぎらない話題だが、複数個のコードを連結させて、makeコマンドを使ってmakeファイルというのを作る。 だが、Fedoraなど一部のLinuxでは、初期状態ではmakeコマンドが入ってないので、まずはmakeコマンド自体をインストールする必要がある。

sudo dnf install make

でmakeコマンドをインストールできる。


もし読者が Windows の Visual Studio を使ってプログラミングしたことがあるなら分かると思うが、 Visual Stuido では C++的な言語で書かれたソースコードとは別に、そのアプリのための各種の設定などを保存したファイルが作成されていただろう。

そして、それら一連のファイルを、Visual Studio の作成した、プロジェクト名のついたフォルダの中に入れて管理していただろう。


Qtも、似たような仕組みである。 Qtでも、C++的なソースコードとは別に、設定などの書かれたソースコードがあり、それをプロジェクト名のついたフォルダの中に入れて管理することになる。

そして先程も述べたが qt-creator とは、Visual Studio のような統合開発環境(IDE)である。

なので、設定を書かれたソースコードを読み取って自動処理するために、どうしても qt-creator 必要になる。

インストール後の設定[編集]

Qt-Creator をデスクトップ側からマウスクリックなどでアイコンをクリックして起動する。そういうアイコンが追加されているハズです。

いっぽう、コマンド端末などで Qt-Creator とか、または単に qt などと入力しても、何も起動しない。

なので、とにかくアイコンクリックで起動しよう。


それから、まず手始めに、画面上部にあるメニューバーの左側の項目から、ファイルの新規作成を選択する必要がある。

どんな種類のアプリケーションを作るか聞かれるので、とりあえず、Qt Widget Application を選べばいい。

Widget (ウィジェット)とは、ウィンドウ部品(ボタンとか、タイトルバーとか、スライダーとか、そういうのの全部)のことである。Qt以外のGUIツールキット(たとえばGTKなど)でも、こういうウィンドウ部品のことをウィジェットというので、覚えておこう。ウィジェットとは、Windowsでいうところの、GUIアプリ開発時の「コンポーネント」のようなものである。

その後、各種の設定確認ダイアログが出てくるので、メクラで「Next」ボタンを押してって、どんどん自動決定できるところまで進んでいけばいい。

しかし、Kit の設定で止まるので、Addでキットを追加する必要がある。

まず、qtの関連ファイルがインストールされているフォルダの場所が画面のメッセージに表示されているので、それをメモしておこう。 /usr/bin/qmake-qt5のようなパスが、画面のどこかに表示されているか、もしくは Qt Versionsタグ またはKitsタグ などを調べれば書かれているだろう。

そして、option のリンクがあるので、そこから、オプション設定画面に移る。

その後、Addボタンなどで、さきほどメモしておいた場所の情報を追加する。いちいちキーボード入力しなくても、Addボタンなどで表示されたファイル選択ダイアログ内で、さきほどメモしておいたフォルダの場所( /usr/bin/qmake-qt5 のような場所)にあるファイルをオープンすれば、自動で設定などを追加してくれるハズである。

こうして、いちど設定しておけば、2回目以降からの新規作成では、この設定情報を再利用することになるので、もはや再度の設定の追加は不要になる。


ウィンドウに文字を表示するだけのプログラム[編集]

まず、上述の初期設定に成功すると、ウィンドウ・ウィジェットの新規作成をする際には、すでに下記のように最低限のコードが書かれたソースコードがIDE画面(Qt-Creator )のコード記述欄に表示される。

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

IDE内で F5 ボタンを押すか、メニューバーからビルドを選んでビルドすると、このプログラムを実行できる。


このプログラムだけでは単にウィンドウを表示するだけのプログラムである。まだ文字も表示できないので、「Hello World」すらも表示できない。タイトルで「Main Window」などが表示されているだけである。


この何も文字表示されてないウィンドウを開いたままにすると以降の作業に邪魔になるので、いった閉じよう。ウィンドウ右上に、ふつうのウィンドウと同様に、閉じる(×)ボタンがあるはずである。


さて、文字表示でいるようにするために「ラベル」というウィジェットを追加する必要があるが、しかしラベルの機能はテンプレ文では、まだインクルードされてないので、

#include <QLabel>

でインクルードする必要がある。

#include "mainwindow.h"

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QLabel label("Hello, world!"); // 追加した文。ラベルの文字内容の定義。
    label.show(); //追加した文。表示の設定。

    w.show();
    return a.exec();
}

これを実行するとわかるが、ウィンドウとは別にラベルが表示される。つまり、このプログラムでは、何も文字が書かれてないウィンドウ1つの表示と、「Hello World!」としか書かれてないラベルという、2つの物体が画面に表示されるだけである。

なぜなら、まだウィンドウとラベルを何も関連づけていないからである。


関連づけは、下記コードのようにラベル作成時などに関連づけを行う。

コード例(Fedora 31 で確認ずみ)
#include "mainwindow.h"

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QLabel label("Hello, world!", &w); // 2番目の引数でウィンドウ「w」と関連づけを行っている。
   // label.show(); // 不要。なぜなら w.show(); でウィンドウを表示すれば、ウィンドウに関連づけられたラベルも同時に表示されるので。

    w.show(); 
    return a.exec();
}

実行ファイルの作成[編集]

Linux では、IDE内でいくら実行しても、単に実行結果をシミュレートするだけで、Windowsでいうようなexeファイル的な実行ファイルを作ることは、IDEでは不可能です。

そもそもLinuxは、環境が多彩なので、だれのパソコンでも動作できるような互換性の高い実行ファイルをサポートするのが困難です。


しかし、オブジェクトファイルは、次のような方法で作れます。


まず、コマンド端末で、ソースコードのあるフォルダに移動します。(初期設定のままなら、Homeフォルダの近くに造られてるので、探してください。)

unixコマンドの cd (チェンジ・ディレクトリ)コマンドで移動できるので、そこに移動してください。 を維持する

そのあと、

qmake-qt5 && make

で、オブジェクトファイルが造られます。OSによっては、コマンド時に上記のようにバージョン番号が必要です。(※ Fedora 31 で確認したところ、「qmake」とだけバージョン番号をつけずにコマンド入力しても「command not found...」エラーになります。)

作成されたオブジェクトファイルを確認するために、GUI側から、ひし形みたいなアイコンがオブジェクトファイルですので、そのアイコンをダブルクリックして起動してみましょう。起動して、「Hello World!」と文字の書かれたウィンドウが出たら成功です。

次の確認作業のため、いったん先ほど開いたウィンドウを閉じましょう。

また、このファイルが本当にオブジェクトファイルであることを確認するために、別フォルダとしてドキュメントフォルダやダウンロードフォルダなどの別のフォルダに、オブジェクトファイルとされるファイルをコピペーストとしてみて、起動して実行してみて確認しましょう。起動して、「Hello World!」と文字の書かれたウィンドウが出たら成功です。