[ C++で開発 ]

Linux OS上のGCC 4でQtを使う

QtはX Window System上のGUIツールキットの一つとして有名ですが、非X Window Systemへもポーティングされています。APIはC++言語として提供されています。

インストールと設定

Linux X Window System用Qt (非商用利用)

Qt開発元のNokia社Qt Software部門のWebサイトにあるQtダウンロードページから、Download Qt libraries 4.5 for Linux/X11を辿って入手します。

ソースパッケージの展開

2009年3月16日現在の最新版

を入手し、解凍・展開します。

qtwork$ tar xvzf qt-x11-opensource-src-4.5.0.tar.gz
    :

configureの実行

Qtのソースは、UNIXオープンソースの伝統的なビルド方法configure/makeでビルドしてインストールします。最初にconfigureでサイト固有の設定を実施します。

qtwork$ cd qt-x11-opensource-src-4.5.0
qt-x11-opensource-src-4.5.0$ ./configure -prefix /usr/local/qt/Qt-4.5.0
  :

configureで指定可能なオプションのうち主要なものは以下のとおりです。

-prefix <dir>
インストール先ディレクトリを指定(デフォルトは/usr/local/Trolltech/Qt-4.5.0)
-prefix-install
すべてのファイルを指定ディレクトリ以下へインストールする。このオプション指定が無効だと、一部のファイルがシステムパスに配置される
-release
Qtをデバッグ機能を無効にしてビルドする(デフォルト)
-debug
Qtをデバッグ機能を有効にしてビルドする
-shared
Qtライブラリを共有動的リンクファイルとして生成
-static
Qtライブラリを静的リンクファイルとして生成
-no-fast
すべてのプロジェクトファイル用のMakefileを生成する(デフォルト)
-fast
ライブラリおよびそのサブディレクトリのプロジェクトのみMakefileを生成する
-no-largefile
4GBを越える大きなサイズのファイルへのアクセスを無効
-largefile
4GBを越える大きなサイズのファイルにQtがアクセス可能にする(デフォルト)
-no-exceptions
例外機構を無効にする
-exceptions
例外機構を有効にする(デフォルト)
-no-stl
STLサポート機能を無効にする
-stl
STLサポート機能を有効にする(デフォルト)
-no-sql-<driver>
SQL <driver>をすべて無効にする
-qt-sql-<driver>
QtSqlライブラリのSQL<driver>を有効にする。デフォルトではすべて無効
-plugin-sql-<driver>
SQL<driver>を実行時にプラグインとしてリンクすることで有効にする
-system-sqlite
OSに標準のsqliteを使用する
-no-qt3support
Qt 3サポート機能を無効にする
-qt3support
Qt 3サポート機能を有効にする(デフォルト)
-no-xmlpatterns
QtXmlPatternsモジュールを生成しない
-xmlpatterns
QtXmlPatternsモジュールを生成する
-no-phonon
Phononモジュールを生成しない
-phonon
Phononモジュールを生成する(デフォルト)
-no-phonon-backend
phononプラグインを生成しない
-phonon-backend
phononプラグインを生成する(デフォルト)
-no-svg
SVGモジュールを生成しない
-svg
SVGモジュールを生成する(デフォルト)
-no-webkit
Webkitモジュールを生成しない
-webkit
Webkitモジュールを生成する(デフォルト)
-no-scripttools
QtScriptToolsモジュールを生成しない
-scripttools
QtScriptToolsモジュールを生成する
-graphicssystem <sys>
別のグラフィックス描画システムを使用する。<sys>には、raster または opengl を指定する
-no-mmx
MMX命令を使用しないでコンパイルする
-no-3dnow
3DNOW命令を使用しないでコンパイルする
-no-sse
SSE命令を使用しないでコンパイルする
-no-sse2
SSE2命令を使用しないでコンパイルする
-qtnamespace <name>
Qtライブラリのコードを、C++のnamespaceで囲う
-qtlibinfix <infix>
ライブラリファイル名を、libQt*.soからlibQt*<infix>.soに変更する

インストール先ディレクトリを細かく指定するには、以下のオプションを指定します。

-bindir <dir>
実行ファイルのインストール先を指定(デフォルトはPREFIX/bin)
-libdir <dir>
ライブラリファイルのインストール先を指定(デフォルトはPREFIX/lib)
-docdir <dir>
ドキュメントファイルのインストール先を指定(デフォルトはPREFIX/doc)
-headerdir <dir>
ヘッダーファイルのインストール先を指定(デフォルトはPREFIX/include)
-plugindir <dir>
プラグインファイルのインストール先を指定(デフォルトはPREFIX/plugins)
-datadir <dir>
Qtプログラムが使用するデータのインストール先を指定(デフォルトはPREFIX)
-translationdir <dir>
Qtプログラムの翻訳のインストール先を指定(デフォルトはPREFIX/translations)
-sysconfdir <dir>
Qtプログラムが設定ファイルを検索する場所を指定(デフォルトはPREFIX/etc/settings)
-examplesdir <dir>
サンプルのインストール先を指定(デフォルトはPREFIX/examples)
-demosidr <dir>
デモプログラムのインストール先を指定(デフォルトはPREFIX/demos)

makeの実行

~/qtwork/qt-x11-opensource-src-4.5.0$ make
  :

次にmake installを実施します。

~/qtwork/qt-x11-opensource-src-4.3.3$ make install
  :

環境変数の設定

qtのコマンド等を実行するため環境変数PATHを指定します。

~/qtwork$ export PATH=$PATH:/usr/local/qt/Qt-4.3.3/bin

開発環境

Eclipse CDT

Linux上では、Ecilpse CDTを使って開発するのが便利です。

Qtプログラミング

Qt Tutorial 1のHello World!

まずは、Hello Worldプログラムを記述し、その環境でコンパイル・リンクし実行させる手順を確認します。

Hello World!のソースコード

ディレクトリ構成

  HelloQt
     +--- src
     |      +--- main.cpp
     

ソースファイル

main.cpp

#include <QApplication>
#include <QPushButton>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QPushButton hello("Hello world!");
    hello.resize(100, 30);

    hello.show();
    return app.exec();
}

Hello World!のコンパイル(コマンドプロンプト編)

qmakeツールを使ってプロジェクトファイル/Makefileを生成します。qmakeは、qmake専用プロジェクトファイル(*.pro)を読み込んで、指定されたビルドツール用の設定ファイルを生成する機能を持っています。また、空のディレクトリでqmake専用プロジェクトファイルの雛形を生成する補助機能を持っています。

まず、上記Hello World!のソースコード「main.cpp」を保存したディレクトリにおいて、qmake専用プロジェクトファイルの雛形を以下のコマンドを実行して生成します。

~/qtwork/HelloQt$ qmake -project

HelloQt.proという名前でqmake専用プロジェクトファイルの雛形が生成されました。ファイル名は、実行したディレクトリ名(HelloQt)に拡張子(.pro)が付与されたものになります。qmake -projectを実行すると、その時点でそのディレクトリおよびサブディレクトリに存在するC++ソースファイル、ヘッダーファイルを検索してプロジェクトファイルの雛形が生成されます。

qmake -projectで生成されたHelloQt.pro

######################################################################
# Automatically generated by qmake (2.01a) ? 11 18 11:16:49 2007
######################################################################

TEMPLATE = app
TARGET =
DEPENDPATH += . src
INCLUDEPATH += .

# Input
SOURCES += src/main.cpp

アプリケーションで必要な設定があれば、このqmakeプロジェクトファイルに追記します。

続いて、Makefileをqmakeツールで生成します。

~/qtwork/HelloQt$ qmake

~/qtwork/HelloQt$ ls
HelloQt.pro
Makefile
src

makeでビルドします。

~/qtwork/HelloQt$ make
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB
-DQT_SHARED -I/usr/local/qt/Qt-4.3.3/mkspecs/linux-g++ -I. -I/usr/local/qt/Qt-4.
3.3/include/QtCore -I/usr/local/qt/Qt-4.3.3/include/QtCore -I/usr/local/qt/Qt-4.
3.3/include/QtGui -I/usr/local/qt/Qt-4.3.3/include/QtGui -I/usr/local/qt/Qt-4.3.
3/include -I. -I. -I. -o main.o src/main.cpp
g++ -Wl,-rpath,/usr/local/qt/Qt-4.3.3/lib -o HelloQt main.o    -L/usr/local/qt/Q
t-4.3.3/lib -lQtGui -L/usr/local/qt/Qt-4.3.3/lib -L/usr/X11R6/lib -lpng -lSM -lI
CE -lXrender -lXrandr -lXfixes -lXcursor -lfreetype -lfontconfig -lXext -lX11 -l
QtCore -lz -lm -lrt -ldl -lpthread 
~/qtwork/HelloQt$ 

※ディレクトリ名にはアプリケーションにちなんだ名前を与えるのがよいようです。または、qmake -projectに-oオプションを追加し生成する雛形ファイル名を指定することもできます。

Hello World!のコンパイル(Eclispe CDTI編)

MOCによるプリプロセスの実行

Hello World!の実行


This page is written by Toru TAKAHASHI.(torutk@02.246.ne.jp)