# KDE アプリケーション チュートリアル

KDevelop統合デスクトップ環境の KDE アプリケーションチュートリアル
Ralf Nolden

    Ralf.Nolden@post.rwth-aachen.de

KDevelop チーム
Version 0.1 , Mon Jun 21 1999

日本語翻訳：レーザーファイブ (info@laser5.co.jp)

KDE アプリケーション チュートリアル ハンドブックは KDevelop 統合開発環境で KDE アプリケーションがどのように作成されるか例を用いて解説し、Qt ライブラリを必要とするそのチュートリアル的な例の構築方法を説明するものです。このハンドブック自体、 KDevelop 統合開発環境の一部であり、したがって GNU General Public License のライセンスに基づいています。詳細は著作権をご覧ください。

## はじめに

KDE が、現在 UNIX システムの標準的デスクトップになるに従い、ますます多くの開発者が出来のいい API の利点の活用を望んでいます。そこで KDE プロジェクトでは GUI に加え、容易に Qt や KDE で提供されるクラスを容易に使用する新しいアプリケーションの作成を行ってます。そのため KDevelop プロジェクトでは、開発者が KDE 上の中核的な部分を用いて素早くアプリケーションを作成し、拡張できるように IDE の提供を試みています。 初心者は常にスタート時に困難を感じるものなので、このハンドブックでは KDevelop IDE を使用し、 Qt ライブラリを必要とするサンプルコードを用いたアプリケーションの実行に加え、例を用い KDE アプリケーションを作る方法を解説することで KDE 用のアプリケーションを作成する際のあらゆる状況を説明します。

さて、次章では既に完成されたアプリケーションである KDevelop を使ってプロジェクトを つくり出す方法を説明することにします。それでは、ソースを含む Qt オンラインドキュメント、例えば Qt ライブラリの使用方法から触れることにします。

これによって、まず Qt ライブラリ基礎機能の仕組み、Qt ライブラリによって用意されるクラスの使用方法を理解することが出来るでしょう。Qt は KDE が Qt ライブラリ層の 上層に成り立ち、KDE アプリケーションはその層を広く用いるといった、スタート的基盤です。

更に、KDevelop　のアプリケーションウイザードを使って mini-KDE アプリケーションの作成方法についても説明します。最小フレームワークで KDE ライブラリを使用する KDE アプリケーションの実行例を作成し、KDE アプリケーションのさまざまな部分を細かく解説します。

KDevelop チームはこのハンドブックが KDE と Qt を学ぶ上で役立つことを期待し、あなたが KDE プロジェクトに貢献して下さるプログラマになることを望んでいます。

### 必要な予備知識

このハンドブックは、最低限、コードとその機能を理解できる程度の C++ プログラミング言語についての基礎的知識を必要とします。加えてKDevelop プログラミングハンドブックだけでなく、KDevelop ユーザーマニュアルにも目を通し、一般に KDevelop IDE がどう機能するか、そしてどのようなプロジェクトができるかを知っていることを前提としています。

## 始めましょう

作業を開始- これはまづ KDevelop を正常にセットアップすることを意味します。"ヘルプ"メニューで Qt オンラインリファレンスドキュメントおよびドキュメントツリーにある関係ドキュメントにアクセスします。Qt ドキュメントの最初のページを見ると、"チュートリアル"や"例" の節へのリンクがあることに気が付くでしょう。"チュートリアル"以下には、アプリケーション構築 のための Qt ライブラリ使用法 14ステップの導入があります。一方、"例"では Qtに依存し、例えばあるクラスで参照的使用を含み、行うプログラムのサンプルリストがあります。全くの初心者であるなら、Qt- の背後に存在する考えに満足することでしょう。Qt- は以下のようなライブラリを提供します:

- ベースアプリケーションクラス(`QApplication`)

- グラフィックユーザインタフェースのウィジェットライブラリ

- グラフィック、ファイル、データ取り扱いの追加補助クラス群

- オブジェクトコミュニケーション用シグナルスロットメカニズム

- イベントループと仮想行程によるイベントコントロール

なにか腑に落ちない点があるならば、Qtアプリケーションの基本について細かく説明されているKDevelop プログラミング ハンドブックで Qt ライブラリについて調べるべきでしょう。そこでは Qt と KDE アプリケーションの違いについての導入も理解できるるでしょう。Qt チュートリアルステップの初歩段階では十分ではありません。

最初に Qt について学ぶことは、KDE アプリケーションのプログラミングに際して良いことです。 ですから編集作業の後チュートリアルアプリケーションを作成するプロジェクトを始めましょう。

そうするためには、KDevelop を開き起動し、メニュバーから"プロジェクト"-"新規作成"を選択します。アプリケーションウイザードが開き、ビルドしたいプロジェクトのタイプを選択します。Qt アプリケーションの場合は Qt アプリケーションを選択しますが、今回サンプルをビルドするので mini-KDE プロジェクトを使用しましょう。 理由は簡単です。つまり Qt チュートリアルはそんなに多くのコードを含んでおらず、アプリケーションウイザードで Qt アプリケーションを選択すると"正当な"サンプルを作成するために必要なコード上の多くの変更を行わなければならないからです。

一方 mini-KDE アプリケーションは空のメインウインドウのみで構成されているだけでなく、Qt ライブラリやヘッダファイルをチェックします、それは今回の目的に適合しており、しかもこれは多くの変更を必要としません。

次のウイザードページに進むと、プロジェクト-特色 情報を記入しなければなりません。 そこでは、ミニアイコンやメインアイコン、ドキュメント等のような KDE 独自の追加事項を省略することが出来ます。チュートリアルに適した基礎構造を構築するのに有用な情報を記入するだけです。チュートリアルステップの構造が、前もって作成されたコード上に次のステップを構築するので、プロジェクト名として`MyWidget`で始めることが出来ます。これは第4章で必要とされる基礎構造をすでに構築しています。ですから後々それに関して気にとめる必要は無いでしょう。チュートリアル第一段階から始めたい場合は、プロジェクト番号として '1' を用います。次のステップに移ると後にその番号もあげることができます。

自分の氏名や e-mail アドレス、プロジェクトディレクトリ等はその他必要な情報に書き込みます。すべきことはそれくらいで、次のページに移ることが出来ます。ここでプロジェクトヘッダファイルに自分のヘッダを挿入するか、手持ちのサンプルを利用します。同様のことが 4 ページ目でなされます。そこでは同様のことがソースファイルにセットされているはずです。最後に、最終ページに入ります。ここでプロジェクトをビルドするために"作成"を押します。ボタンが有効でない場合は、 最初のページからやり直し、必要とされている全ての情報に記入もれが無いことを確認して下さい。

全てが OK となったら、プロジェクトのビルドは完了し、アプリケーションウイザードにメッセージウインドウが "準備完了" と最終行に表示されます。ウイザードを終了するために"終了"を選択します。

左側にツリービュが見えたら、プロジェクトには既に "マイ ウィジェット"クラスが含まれるということです。 - これはアプリケーション名としてそれを選んだからです。更に、クラス表示の"広域"フォルダ内の"関数"を開くと、そのアプリケーションが既に含む`main()`関数が分かるはずです。その関数から実行が始まります。

アプリケーションはセットアップされました。あとは"実行"もしくは"作成"をするわけです が、今回はチュートリアルアプリケーションを作成したいので、先に次のステップで行うチュートリアルサンプル- を作成するためのコードをまず変更します。

## Qt チュートリアルのビルド

### ステップ 1: Hello World!

前章で説明したように、`MyWidget`というプロジェクトを作成しました。- Qt ドキュメントの最初のチュートリアルのページをみると、一番はじめのアプリケーションは`main()`関数のみを使用しただけであると分かるでしょう。それゆえ、最初のチュートリアルステップを実行させるために構成したプロジェクトで与えられた`main()`関数を変更するだけで良いのです。

`main()`関数にアクセスするためには、クラス表示の "広域"フォルダからそれを選択します。この"広域"フォルダは全ての否クラス関数がリストされている"関数"というサブフォルダがあります。これは"C/C++ファイル"ウインドウで`main.cpp`ファイルを開き、編集カーソルが`main()`の最初の行にセットされます。

#### 最初に変更すること

チュートリアル- にあがっている、要求されるコードに与えられたコードを変更をすることから始めます。-しかしそれすらも簡単です。マウスまたは下矢印キーで行を選びシフトキーを押すことで`main()`関数の内容を選択します。選んだコードを削除するには"編集"メニュから"切り取り"を選択するか、デリートキーを押してください。これ でメイン関数をクリアにし、最初のチュートリアルをビルドするためにゼロから始めることが出来るようになります。

#### チュートリアルコードの入力

チュートリアルからコードを挿入するには、まず注意してそのチュートリアルを読み、どの行がどのコードを含んでいるかを覚えてください。チュートリアルの行ごとの内容を読んだら、それをチュートリアルを書くためのサンプルとして使用します。

容易な方法をふみたい方は、ドキュメントブラウザにリストされている`main()`関数の内容を選択し、ツールバーから"コピー"-アイコンを選びます。付属的にコンテキストメニュー、もしくは"編集"メニューの対応するエントリを選択することも出来ます。これで選択したものをクリップボードにコピーし、ソースコードウインドウ にスイッチを切り替えた後(コンテキストメニュー、ツールバーアイコンもしくは"編集"メニューの対応するエントリからでも)"張り付け"で挿入することが出来ます。

最後に、`main()`関数の外に対応するヘッダファイルを 追加します。

    #include <qapplication.h>
    #include <qpushbutton.h>

これでソースコードは最初のチュートリアルアプリケーションに変わります。

#### Hello World!のビルド

最初のチュートリアルをビルドするために、"ビルド"メニューから"作成"を選択、もしくは対応するツールバーアイコンを押します。オプションとして"実行"を選択することも出来ます。これはビルドが成功した後、アプリケーションを実行するところまで行います。

ビルドがエラーで停止してしまった場合、それはチュートリアル上のミスではなく、プログラマ側の問題でしょう。KDE や Qt でのプログラムを決意したまさにそのときにエラーを探す作業というのは実に悲しいものです。しかし KDevelop を用いトレーニング用にこれを使うことも出来ます。エラーを探しだすには二つのオプションがあります。出力ウインドウで対応するエラーメッセージを選択、そうするとエラー発生に対応する行に移動します。または F4 キーを押します。オプションとして"表示"メニューで"次のエラー"エントリを使用することも出来ます。

#### 練習

「練習？これは簡単すぎる。練習なんかいらないよ！」と言われるかも知れません。しかるに物事がより複雑になっていくことは確かです。これはもっとも簡単な例ですが、複雑になればなるほど、あなたの側で理解しさらに考えることがが求められ、そしてチュートリアルステップに従うようになります。練習によって、実際の KDevelop の利用方法やその特徴について学ぶことが出来ます。

最初のチュートリアルでもっと色々なことを知るには、与えられたコードに対して次の変更を行い、これがアプリケーションの動作にどのように反映するかを見るべきでしょう。:

1. ボタンを QLabel に変更

2. プッシュボタンコンストラクタでテキストを直接セッティングする代わりに`setText()`を使用します。

3. 直接幅と高さでサイズを設置する代わりに`QPushButton::resize (const QSize & s )`を使用します。サイズを枠組みとなる最初の例`QSize`を作成します。

4. 幅と高さを決定するサイズの調整。

### ステップ 2 & 3: 拡張

チュートリアルのステップ 2 & 3 は最初のチュートリアルの機能拡張です。ここでウィジェット間の親子関係だけではなく、シグナルやスロットについて学ぶことになるでしょう。

なぜこれについて学ぶことがそんなに重要なのでしょうか？ Qt ライブラリと他のウィジェットライブラリとを比較し、シグナルとスロットは相違点を作成する技術を構築します。 オブジェクト間での通信を要する実行上の問題に遭遇するようなときはいつでも何か誤りがあったならば作業量を劇的に短くし、深刻にならないことことです。接続ミスでさえセグメンテーションフォルトを引き起こしません。これが Qt ライブラリの威力であり、KDE/Qt 開発者の多くがその柔軟性が故にそれを失うことをおそれるているのです。したがってシグナル/スロットメカニズムを理解することは KDE/Qt アプリケーションを作成する上で、最も基本的なことです。

他に注意すべきことは、`quit()`を呼び出すことによっ てそのボタンが`QApplication`インスタンスを終了させることです。 `QApplication`の KDE-ペンダントや`KApplication`を用いて作業する場合、再び`quit()`に遭遇することになるでしょう。

### ウィジェットを書く

`main()`関数の変更と拡張が成功した後、新しいウィジェット- ステップ 4 で書こうとしているクラスでのみ構築できるユニークなウィジェットの作成に入ります。実際、そのクラスはアプリケーションウイザードで作られます、それ故追加はあまりなく、ステップ 4では`main.cpp`ファイルを`MyWidget`のクラスヘッダと実行ファイルに置くコードの挿入くらいです。幸運にもコンストラクターコードにインプリメンテーションを追加するだけなのです。

コンストラクターにアクセスするには、クラス表示から選択します。これは自動的にコード を追加すべきインプリメンテーションに移動します。

ここで、調べるべきことは`qfont.h`が含まれているがです。-`QFont`は`MyWidget`のコンストラクターコードでのみ使われます。そのため`mywidget.cpp`ファイルの始めに`&num;include <qfont.h>`を追加します。

新しいアプリケーションを実行するには、"実行"を押します。これは自動保存後の変更を コンパイルするところまで行います

### ウィジェットクラスの拡張

レッスン 5 での目標は ウィジェットクラスの拡張です。したがって、仮想関数についても学びましょう。ここで`resizeEvent()`が再実相されます。(クラスを拡張する以外に)ここで学ぶ重要なことは、パラメータとしてイベントを要する仮想関数によってユーザのイベントを用い Qt が機能するということです。以下に続く Qt ライブラリのクラスで快適になるでしょう。

- QEvent

- QChildEvent

- QCloseEvent

- QFocusEvent

- QKeyEvent

- QMouseEvent

- QMoveEvent

- QPaintEvent

- QResizeEvent

- QTimerEvent

カスタムウィジェット、特にアプリケーションの表示領域を記述する際は常に、処理されなけれ ばならないイベントに対するウィジェットのイベントメソッドのデフォルトのインプリメンテーションを独自で上書きしなければなりません。以下のような形です。

マウスイベントを処理するため`virtual void mousePressEvent ( QMouseEvent * )`はコンテクストメニューを表します。インプリメンテーションで、関数のヘッダに正式なパラメータを挿入しなければなりません。多くの開発者はパラメータ 名として`event`または単に`e`を使います。

そうすると、イベントパラメータを処理することが出来ます。`QMouseEvent`の場合、そのイベントを発生させたのがマウスの右ボタンか、中ボタンか左ボタンのどれであるかを問わなければなりません。

### 新しいクラスの追加

レッスン6では、チュートリアルアプリケーションにクラスを一つ追加しましょう。 普通ならば"単にヘッダファイルや実装ファイルを作成し、それで終了"と考えるでしょう。しか し KDevelop は更にその作業を簡単にします。クラスを追加するには、常に Classgenerator を使用します。これが全ての作業を行い、そうすると単に特定のコードを追加するだけです。

Classgenerator でクラスを追加するためには、"プロジェクト"-"新規クラス"を選択します。これで追加したいクラスに必要な全ての値を入力するためのダイアログが開きます。最初に挿入しなければならないのはクラス名です。チュートリアル名はこの`LCDRange`で、したがってこれは最初に挿入されていなければなりません。次に基本クラスに進みます。 基本クラスは新しいクラスが引き継ぐものです。チュートリアル(Qt 1.42)を見ると、これは `Qウィジェット`です。追加される多くの GUI クラスが Qウィジェットを受け継ぐので、Classgenerator はそれをなお簡単にします。基本クラスを空のままにし、その代わり"追加オプション"セクションの "Qウィジェット チャイルドクラス"をチェックします。こうすると自動的に要求されている`Q&lowbar;OBJECT`マクロを、後でスロットとシグナルを追加するために ヘッダファイルに追加します(7章に記載されています)。

ファイル名は自動的に挿入されるため、その点について注意を払う必要はありません。追加を推奨している唯一のことはドキュメントです。特に`LCDRange`というクラス名がウィジェットの目的について特に示唆していない場合、クラスにドキュメントを追加するのは良いスタイルです。

### ステップ 7-14

チュートリアルの残りのステップとして、覚悟し、知らなければならないこと、つまり要求されるクラスを追加し、変更を行うことです。

個々の変更の後、新しくビルドし、エラーのためにはコードをチェックしなければなりませ ん。アプリケーションを実行させ、その指示に従ってください。ついでに"ビルド"のため KDevelop のオプションを用いてみましょう。--geometry のようなコマンドライン引数でアプリケーションを実行し、ツールウインドウで KDbg を用いてそれをデバッグします。すると、次章で話題となる Qt サンプルを使って処理することができるでしょう。

## 著作権

    KDevelop Copyright 1998,1999 The KDevelop Team.

    このプログラムはフリーソフトウエアです。Free Software Foundation が発行しているGNU General Public License のバージョン2以降の条項に基づいて、再配布あるいは変更、またはその両方を（任意に）行うことができます。

    このプログラムは、広く役立てられることを希望して配布されているものですが、保証はありません。市販性あるいは特定の目的に対する適合性についての、黙示的保証も含めて何らの保証もされていません。詳細は、GNU General Public License を参照してください。

    GNU General Public License は、このプログラムに付属して配布されているはずです。付属していない場合は、Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USAにご連絡ください。