diff options
author | Takumi ASAKI <takumi.asaki@nokia.com> | 2010-06-07 02:13:11 (GMT) |
---|---|---|
committer | Takumi ASAKI <takumi.asaki@nokia.com> | 2010-06-07 02:13:11 (GMT) |
commit | eba8e2c10c5bc1b373fdf7640962029cb2e7908f (patch) | |
tree | 868460b8ccfd19ba6ae8a00c1c673c6e1b11bbf5 /doc/src/ja_JP/development | |
parent | e3ee3780777b07e6283a8b33cd4f7e1d56241d1c (diff) | |
download | Qt-eba8e2c10c5bc1b373fdf7640962029cb2e7908f.zip Qt-eba8e2c10c5bc1b373fdf7640962029cb2e7908f.tar.gz Qt-eba8e2c10c5bc1b373fdf7640962029cb2e7908f.tar.bz2 |
* Add Japanese tutorial documents
* Add Japanese hellotr example
Diffstat (limited to 'doc/src/ja_JP/development')
-rw-r--r-- | doc/src/ja_JP/development/designer-manual.qdoc | 175 | ||||
-rw-r--r-- | doc/src/ja_JP/development/qmake-manual.qdoc | 212 | ||||
-rw-r--r-- | doc/src/ja_JP/development/qtestlib.qdoc | 432 |
3 files changed, 819 insertions, 0 deletions
diff --git a/doc/src/ja_JP/development/designer-manual.qdoc b/doc/src/ja_JP/development/designer-manual.qdoc new file mode 100644 index 0000000..585af16 --- /dev/null +++ b/doc/src/ja_JP/development/designer-manual.qdoc @@ -0,0 +1,175 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page designer-quick-start.html + + \title Qt Designer クイックガイド + + \QD を使うための基本的な手順は、以下の\bold{四つ}です。 + + \list 1 + \o フォームとオブジェクトを選択する + \o フォームにオブジェクトを配置する + \o スロットにシグナルを接続する + \o フォームをプレビューする + \endlist + + \image rgbController-screenshot.png + + Red、Green、Blue(RGB)の値を操作するために必要なコントロールを含む + 小さなウィジェット(上記スクリーンショット参照)を設計する場合を想定します。 + このウィジェットは、画像処理プログラム内のどこからでも表示できるウィジェットです。 + + \table + \row + \i \inlineimage designer-choosing-form.png + \i \bold{フォームを選択する} + + \gui{新しいフォーム} ダイアログから \gui Widget を選択して開始します。 + \endtable + + + \table + \row + \i \inlineimage rgbController-arrangement.png + \i \bold{フォームにウィジェットを配置する} + + 3つのラベル(Label)、スピンボックス(Spin Box)、垂直方向のスライダ(Vertical Slider)をフォーム上へドラッグします。 + ラベルの既定の文字列を変更するには、文字列をダブルクリックします。 + 希望するレイアウトに合わせて配置します。 + \endtable + + 画像のようにこれらのウィジェットを配置するには、 + レイアウトにウィジェットを配置する必要があります。 + これを3つグループに対して行います。 + まず "RED" ラベルを選択します。 + 次に、\key Ctrl (Mac OS X では \key Command)キーを押したまま、対応するスピンボックスとスライダを選択します。 + \gui{フォーム} メニューで、\gui{格子状に並べる}を選択します。 + + \table + \row + \i \inlineimage rgbController-form-gridLayout.png + \i \inlineimage rgbController-selectForLayout.png + \endtable + + 他の2つのラベルに対しても、対応するスピンボックスとスライダごとにこの手順を繰り返します。 + + 次の手順は、これら3つのレイアウトを組み合わせて、1つの\bold{メインレイアウト}を作成することです。 + メインレイアウトとは、トップレベルウィジェット(この場合は QWidget)のレイアウトです。 + トップレベルウィジェットにレイアウトを配置することは重要です。 + そうでなければ、ウィンドウをサイズ変更したときにウィンドウ上のウィジェットのサイズが変更されません。 + レイアウトを設定するには、フォーム上の3つのレイアウト以外の任意の場所で\gui{右クリック}し、\gui{水平に並べる}を選択します。 + または、\gui{格子状に並べる}を選択することもできます。 + そのどちらでも同じ配置(以下を参照)で表示されます。 + + \image rgbController-final-layout.png + + \note メインレイアウトはフォームに表示できません。 + メインレイアウトがインストールされているかどうかを確認するには、 + フォームをサイズ変更してみます。 + インストールされている場合は、各ウィジェットのサイズが適宜変更されます。 + または、\QD の \gui{Object Inspector} で確認することもできます。 + トップレベルウィジェットにレイアウトが配置されていない場合、 + その横に崩れたレイアウトのアイコン \inlineimage rgbController-no-toplevel-layout.png + が表示されます。 + + スライダをクリックして特定の値までドラッグするときに、 + スピンボックスにスライダの位置を反映させます。 + この操作を行うには、スライダの \l{QAbstractSlider::}{valueChanged()} + シグナルをスピンボックスの \l{QSpinBox::}{setValue()} + スロットに接続する必要があります。 + また、逆方向、すなわちスピンボックスの \l{QSpinBox::}{valueChanged()} + シグナルをスライダの \l{QAbstractSlider::value()}{setValue()} スロットに接続する必要があります。 + + この操作を行うには、\key{F4} キーを押すか、\gui{編集|シグナル/スロットの編集} を選択し、 + \gui{シグナル/スロットの編集}モードに切り替える必要があります。 + + \table + \row + \i \inlineimage rgbController-signalsAndSlots.png + \i \bold{シグナルをスロットに接続する} + + スライダをクリックし、カーソルをスピンボックスまでドラッグします。 + 以下のような \gui{シグナルスロットを設定} ダイアログがポップアップ表示されます。 + 適切なシグナルとスロットを選択し、\gui OK をクリックします。 + \endtable + + \image rgbController-configure-connection1.png + + 手順を(逆の順序で)繰り返し、 + スピンボックスをクリックしてカーソルをスライダまでドラッグし、 + スピンボックスの \l{QSpinBox::}{valueChanged()} シグナルを、 + スライダの \l{QAbstractSlider::value()}{setValue()} スロットに接続します。 + + 以下のスクリーンショットは、適切なシグナルとスロットを選択するためのガイドとして利用できます。 + + \image rgbController-configure-connection2.png + + RGBコントローラーの "RED" コンポーネントのオブジェクトが正常に接続されたので、 + "GREEN" および "BLUE" コンポーネントにも同じ手順を繰り返します。 + + RGB値の範囲は 0 ~ 255 であるため、 + スピンボックスとスライダを特定の範囲に制限する必要があります。 + + \table + \row + \i \inlineimage rgbController-property-editing.png + \i \bold{ウィジェットのプロパティを設定する} + + 最初のスピンボックスをクリックします。 + \gui{プロパティエディタ}に \l{QSpinBox} のプロパティが表示されます。 + \l{QSpinBox::}{maximum} のプロパティに、"255" と入力します。 + 次に、最初の垂直方向のスライダをクリックすると、 + \l{QAbstractSlider} のプロパティが表示されます。 + \l{QAbstractSlider::}{maximum} のプロパティにも、"255" と入力します。 + 残りのスピンボックスとスライダに対しても、この処理を繰り返します。 + \endtable + + ここで、フォームをプレビューし、アプリケーションの外観を確認します。 + この操作を行うには、\key{Ctrl + R} を押すか、 + \gui{フォーム}メニューから\gui{プレビュー}を選択します。 + スライダをドラッグすると、 + スピンボックスにその値が反映されます(逆の場合も同じ)。 + またサイズを変更し、子ウィジェットの管理に使用するレイアウトが + どのようにウィンドウのさまざまなサイズに対応しているか確認します。 +*/ + diff --git a/doc/src/ja_JP/development/qmake-manual.qdoc b/doc/src/ja_JP/development/qmake-manual.qdoc new file mode 100644 index 0000000..8c9297f --- /dev/null +++ b/doc/src/ja_JP/development/qmake-manual.qdoc @@ -0,0 +1,212 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qmake-tutorial.html + \title qmake チュートリアル + + このチュートリアルでは \c qmake の使い方を説明します。 + このチュートリアルを読み終わったら \c qmake + のユーザガイドを読むことをお勧めします。 + + \section1 簡単な例 + + アプリケーションの基本的な実装は既に完了していて、 + 次のファイルが作成されていると仮定します。 + + \list + \o hello.cpp + \o hello.h + \o main.cpp + \endlist + + これらのファイルは Qt ディストリビューションの + \c{examples/qmake/tutorial} ディレクトリにあります。 + アプリケーションの設定について知っておくべきことは、 + それが Qt で書かれているということだけです。 + まず、テキストエディタで \c{examples/qmake/tutorial} に + \c hello.pro というファイルを作成します。 + 最初にすることは、開発プロジェクトに含まれるソースファイルとヘッダファイルを + \c qmake に教える行を追加することです。 + + ソースファイルをプロジェクトファイルに追加します。 + これには \l{qmake Variable Reference#SOURCES}{SOURCES} 変数を使います。 + 新しい行を作り、\c{SOURCES +=}、続いて hello.cpp を入力します。 + つまり、以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 108 + + これを以下のようになるまでプロジェクトの各ソースファイルに対して行います: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 109 + + make に似たシンタックスを使いたい場合は、 + 以下のように改行をエスケープしてすべてのファイルを 1 行に書きます: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 110 + + ソースファイルの一覧をプロジェクトファイルに追加しました。 + 次にヘッダファイルを追加します。 + ヘッダファイルはソースファイルと全く同じ方法で追加することができます。 + ただし変数は \l{qmake Variable Reference#HEADERS}{HEADERS} + を使います。 + + これを終えると、プロジェクトファイルは以下のようになるでしょう: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 111 + + ターゲットの名前は自動的に設定され、 + プロジェクトファイルと同じ名前になります。 + ただしプラットフォームに合わせたサフィックスがつけられます。 + 例えば、プロジェクトファイルが \c hello.pro である場合、 + ターゲットは Windows では \c hello.exe 、Unix では \c hello になります。 + プロジェクトファイルで別の名前を指定することもできます: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 112 + + 最後に \l{qmake Variable Reference#CONFIG}{CONFIG} 変数を設定します。 + このアプリケーションは Qt アプリケーションなので \c CONFIG に + \c qt を追加する必要があります。 + \c qmake は リンクの必要があるライブラリを追加し、 + \c moc と \c uic の実行コマンドが Makefile に含まれるようにします。 + + 最終的なプロジェクトファイルは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 113 + + \c qmake を使って、このアプリケーションのための Makefile を生成します。 + プロジェクトのディレクトリでコマンドラインに次のように入力します: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 114 + + そして、使用するコンパイラによって \c make または \c nmake を入力します。 + + Visual Studio ユーザの場合、\c qmake は、以下のように + \c .dsp ファイルまたは \c .vcproj ファイルも作成できます: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 115 + + \section1 アプリケーションをデバッグできるようにする + + アプリケーションのリリースバージョンはデバッグシンボルなどのデバッグ情報を含みません。 + 開発中は、関連情報を含むアプリケーションのデバッグバージョンを作成するのが便利です。 + これは、プロジェクトファイルの \c CONFIG 変数に \c debug + を追加することで簡単に実現できます。 + + たとえば: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 116 + + 直前の例と同様に、Makefile を生成するには \c qmake を使います。 + アプリケーションをデバッグ環境で実行する際に役に立つ情報を得られるようになります。 + + \section1 プラットフォーム固有のソースファイルを追加する + + 数時間コーディングをしていると、 + アプリケーションにプラットフォーム固有な部分が出てきて + プラットフォーム固有のコードを別のファイルに分けたい場合があるかもしれません。 + ここでは 2 つのファイル \c hellowin.cpp と \c hellounix.cpp があるとして、 + これをプロジェクトファイルに追加します。 + これらのファイルをそのまま \c SOURCES 変数に追加することはできません。 + なぜなら、両方のファイルが Makefile に追加されてしまうからです。 + \c qmake が実行されたプラットフォームにしたがって処理されるスコープを使う必要があります。 + + Windows 用のファイルを追加するシンプルなスコープは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 117 + + \c qmake が Windows 上で実行されると、ソースファイルのリストに + \c hellowin.cpp が追加されます。 + \c qmake が他のプラットフォームで実行された場合、この部分は無視されます。 + 次に Unix 用ファイルのスコープを作成します。 + + これを終えると、プロジェクトファイルは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 118 + + これまでと同様に、Makefile を生成するには \c qmake を使います。 + + \section1 ファイルが存在しない場合に qmake を中止する + + 特定のファイルが存在しない場合に Makefile を作成したくない場合、 + exists() 関数を使ってファイルが存在するかどうかを確認することができます。 + また error() 関数を使って \c qmake の処理を中止させることができます。 + これらの関数はスコープとして動作します。 + 使い方はスコープの条件をこれらの関数で置き換えるだけです。 + \c main.cpp ファイルの確認は以下のようになります : + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 119 + + 記号 \c{!} はテストを否定します。 + つまり \c{exists( main.cpp )} はファイルが存在する場合に真になり、 + \c{!exists( main.cpp )} はファイルが存在しない場合に真になります。 + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 120 + + 前と同様に、\c qmake を実行して Makefile を生成します。 + 仮に \c main.cpp の名前を変更すると、上記のメッセージが表示され、 + \c qmake は処理を中止します。 + + \section1 複数の条件をチェックする + + Windows を使っていて、 + コマンドラインからこのアプリケーションを実行したときに + qDebug() の出力を見ることができるようにしたい場合、 + アプリケーションをコンソールの設定を追加してビルドする必要があります。 + Windows で Makefile をこの設定にするには、 + \c CONFIG に \c console を追加します。 + Windows で実行されていて、\e{かつ} \c CONFIG にすでに \c debug + がある場合にのみ \c CONFIG を追加したい場合があるかもしれません。 + このような場合、2 つのスコープをネストさせて使います。 + まず 1 つのスコープを作成し、その中にもう 1 つスコープを作成します。 + そして 2 つのスコープの中に設定を書きます。例えば: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 121 + + ネストされたスコープはコロンを使ってつなぐことができます。 + 最終的なプロジェクトファイルは以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 122 + + 以上です。\c qmake のチュートリアルが終了しました。 + それでは、あなたの開発プロジェクトのプロジェクトファイルを作成してみましょう。 +*/ + diff --git a/doc/src/ja_JP/development/qtestlib.qdoc b/doc/src/ja_JP/development/qtestlib.qdoc new file mode 100644 index 0000000..65c4c3f --- /dev/null +++ b/doc/src/ja_JP/development/qtestlib.qdoc @@ -0,0 +1,432 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtestlib-tutorial.html + \brief QTestLib を使ったテストの導入ガイド + \contentspage QTestLib マニュアル + \nextpage {第1章: ユニットテストの作成}{第1章} + + \title QTestLib チュートリアル + + このチュートリアルでは QTestLib フレームワークの機能の初歩的な使い方を説明します。 + このチュートリアルは全5章で構成されています: + + \list 1 + \o \l {第1章: ユニットテストの作成}{ユニットテストの作成} + \o \l {第2章: データドリブンテスト}{データドリブンテスト} + \o \l {第3章: GUI イベントのシミュレート}{GUI イベントのシミュレート} + \o \l {第4章: GUI イベントの再現}{GUI イベントの再現} + \o \l {第5章: ベンチマークの作成}{ベンチマークの作成} + \endlist + +*/ + + +/*! + \example qtestlib/tutorial1 + + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第2章: データドリブンテスト}{第2章} + + \title 第1章: ユニットテストの作成 + + 第1章では、クラスのテストを行うシンプルなユニットテストを作成して実行する方法を説明します。 + + \section1 テストを作成する + + QString クラスの挙動をテストすると仮定しましょう。 + まず、テスト関数を含むクラスが必要です。 + このクラスは、 QObject を継承する必要があります: + + \snippet examples/qtestlib/tutorial1/testqstring.cpp 0 + + QTest ヘッダーを include してください。 + それから、テストフレームワークがテスト関数を検索して実行できるよう、 + テスト関数を private slot として宣言する必要があります。 + + 次に、テスト関数を実装します。実装は以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 8 + + \l QVERIFY() マクロは、引数として渡される式を評価します。 + 式が真と評価されるとテスト関数の実行が継続されます。 + そうでなければ、エラーメッセージがテストログに追加されテスト関数の実行が停止します。 + + テストログに詳細情報を追加したい場合は、 + \l QCOMPARE() マクロを代わりに使用してください: + + \snippet examples/qtestlib/tutorial1/testqstring.cpp 1 + + 文字列が等しくない場合、両方の文字列の内容がテストログに追加され、 + 比較に失敗した理由を直ちに確認できます。 + + 最後に、テストケースを実行可能にするために以下の2行が必要となります: + + \snippet examples/qtestlib/tutorial1/testqstring.cpp 2 + + \l QTEST_MAIN() マクロは、すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 + + \section1 テストを実行する + + 作成したテストを実行してみましょう。 + テストが \c testqstring.cpp + として空のディレクトリに保存されていると仮定して、 + qmake を使用してプロジェクトを作成し、makefile を生成します。 + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 9 + + \bold {注:} Windows をお使いの場合、 \c make を \c nmake または、 + 任意のビルドツールに置き換えてください。 + + 作成した実行ファイルを実行すると、次の出力が表示されます: + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 10 + + おめでとうございます! + QTestLib フレームワークを使用して、 + 最初のユニットテストの作成と実行に成功しました。 +*/ + +/*! + \example qtestlib/tutorial2 + + \previouspage {第1章: ユニットテストの作成}{第1章} + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第3章: GUI イベントのシミュレート}{第3章} + + \title 第2章: データドリブンテスト + + 本章ではテストを複数回、それぞれ異なるテストデータを使用して行う方法について、 + 例を示しながら説明します。 + + これまでは、テストデータをテスト関数にハードコードしていました。 + この場合、テストデータを追加した関数は以下のようになります: + + \snippet doc/src/snippets/code/doc_src_qtestlib.qdoc 11 + + 関数が繰り返しを行うコードによって分散するのを防ぐために、 + QTestLib はテストデータのテスト関数への追加をサポートします。 + そのために、別の private slot をテストクラスに追加する必要があります: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 0 + + \section1 データ関数を記述する + + テスト関数に関連するデータ関数では、テスト関数と同じ関数名を使用して、 + 末尾に \c{_data} を追加します。 + データ関数は以下のようになります: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 1 + + まず、 \l QTest::addColumn() 関数を使用して、 + テストテーブルの2つの要素(テスト文字列(\c{"string"})および、 + QString::toUpper() 関数をその文字列に適用するときに予期された結果(\c{"result"})) + を定義します。 + + 次に、 \l QTest::newRow() 関数を使用して、 + データをテーブルに追加します。 + それぞれのデータセットは、テストテーブルでは別々の行(Row)になります。 + + \l QTest::newRow() は、データセット名をその引数として受け付けます。 + テストに失敗した場合、テストログでこのデータセット名が使用され、 + 失敗したデータの一覧が表示されます。 + 続いて、最初に任意の文字列(\c{"string"})を、次に + QString::toUpper() 関数をその文字列(\c{"string"})に適用するときに予期された結果(\c{"result"})の順に、 + テーブル行にデータセットをストリーミングします。 + + テストデータとは、二次元テーブルを指します。 + ここでは、\c string および \c result と呼ばれる2つの列と3つの行が含まれます。 + さらに、インデックスと同様に、各行に名前を関連付けます: + + \table + \header + \o index + \o name + \o string + \o result + \row + \o 0 + \o all lower + \o "hello" + \o HELLO + \row + \o 1 + \o mixed + \o "Hello" + \o HELLO + \row + \o 2 + \o all upper + \o "HELLO" + \o HELLO + \endtable + + \section1 テスト関数を書き換える + + ここで、テスト関数の書き換えを行います: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 2 + + TestQString::toUpper() 関数は 3 回実行されます。 + すなわち、関連する TestQString::toUpper_data() + 関数で作成したテストテーブルの各エントリ毎に一度実行されます。 + + TestQString::toUpper() 関数では + まず、 \l QFETCH() マクロを使用して、データセットの2つの要素を取得します。 + \l QFETCH() は、要素のデータタイプと要素名の、 + 2 つの引数を取ります。 + 次に \l QCOMPARE() マクロを使用して、テストを実行します。 + + このアプローチにより、テストの修正を行うことなく + テストに新規データを非常に簡単に追加できます。 + + このテストの場合も、テストケースを実行可能にするには、 + 同様に以下の2行が必要です: + + \snippet examples/qtestlib/tutorial2/testqstring.cpp 3 + + これまでと同様に、 \l QTEST_MAIN() マクロは + すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 + +*/ + +/*! + \example qtestlib/tutorial3 + + \previouspage {第2章: データドリブンテスト}{第2章} + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第4章: GUI イベントの再現}{第4章} + + \title 第3章: GUI イベントのシミュレート + + QTestLib にはグラフィカルユーザインターフェースをテストするための機能があります。 + QTestLib は、ネイティブなウィンドウシステムのイベントをシミュレートする代わりに、 + Qt の内部で使われるイベントを送信します。 + このため、テストが実行されるコンピュータには + 副次的な悪影響が発生しません。 + + 本章では、シンプルな GUI テストを作成する方法を確認します。 + + \section1 GUI テストを作成する + + 今回は、 QLineEdit クラスの挙動をテストすると仮定しましょう。 + これまでと同様に、テスト関数を含むクラスが必要です: + + \snippet examples/qtestlib/tutorial3/testgui.cpp 0 + + 唯一の違いは、 QTest だけでなく、 QtGui クラスの宣言を + include する必要があることです。 + + \snippet examples/qtestlib/tutorial3/testgui.cpp 1 + + テスト関数を実装する際は、最初に QLineEdit を作成します。 + 次に、 \l QTest::keyClicks() 関数を使用して、 + "hello world" をラインエディットに入力する操作をシミュレートします。 + + \note キーボードショートカットを正しくテストするには、 + ウィジェットの表示も必要になります。 + + QTest::keyClicks() は、 + ウィジェットのキーシーケンスの入力をシミュレートします。 + 必要に応じてキーボード修飾子の指定や、 + 各キー入力後の遅延(ミリ秒単位)を指定することができます。 + 同様に、 QTest::keyClick() 、 QTest::keyPress() 、 QTest::keyRelease() 、 + QTest::mouseClick() 、 QTest::mouseDClick() 、 QTest::mouseMove() 、 + QTest::mousePress() 及び QTest::mouseRelease() 関数を使用して、 + 関連付けられた GUI イベントをシミュレートできます。 + + 最後に、 \l QCOMPARE() マクロを使用して、 + ラインエディットの文字列が正しいかどうか確認します。 + + これまでと同様に、 + テストケースを実行可能にするには、 + 以下の2行が必要です: + + \snippet examples/qtestlib/tutorial3/testgui.cpp 2 + + QTEST_MAIN() マクロは + すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 +*/ + +/*! + \example qtestlib/tutorial4 + + \previouspage {第3章: GUI イベントのシミュレート}{第3章} + \contentspage {QTestLib チュートリアル}{目次} + \nextpage {第5章: ベンチマークの作成}{第5章} + + \title 第4章: GUI イベントの再現 + + 本章では、GUI イベントをシミュレートしたり、 + あるウィジェットで一連の GUI イベントを再生したり保存したりする方法について説明します。 + + 一連のイベントを保存して再生するアプローチは、 + \l{第2章: データドリブンテスト}{第2章} + で説明したアプローチとよく似ています。 + 必要な変更は、テストクラスにデータ関数を追加することです: + + \snippet examples/qtestlib/tutorial4/testgui.cpp 0 + + \section1 データ関数を記述する + + これまでと同様にテスト関数に関連するデータ関数では、 + テスト関数と同じ名前を使用して末尾に \c{_data} を追加します。 + + \snippet examples/qtestlib/tutorial4/testgui.cpp 1 + + まず、 QTest::addColumn() 関数を使用して、 + テーブルの2つの要素(GUI イベントのリスト(\c{"events"})および、 + QWidget のイベントのリストを適用するときに予期された結果(\c{"expected"}))を定義します。 + 最初の要素の型は \l QTestEventList であることに注意してください。 + + QTestEventList では、後で使用するテストデータの保存を行うために + GUI イベントを読み込んだり、 QWidget ウィジェットで再生したりできます。 + + 現在のデータ関数で、 \l QTestEventList を2つ作成します。 + 最初のリストには 'a' キーを一度だけ入力します。 + QTestEventList::addKeyClick() 関数を使用して、 + リストにイベントを追加します。 + 次に、QTest::newRow() 関数を使用してデータセットに名前を付けて、 + テーブルにイベントリストおよび予期された結果をストリーミングします。 + + 2つ目のリストには、2つのキー入力('a' に続いてバックスペース(Qt::Key_Backspace))を設定します。 + QTestEventList::addKeyClick() を使用してリストにイベントを追加し、 + QTest::newRow() を使用して名前を関連付けたテーブルにイベントリストおよび予期された結果を挿入します。 + + \section1 テスト関数を書き換える + + ここで、テストの書き換えを行います: + + \snippet examples/qtestlib/tutorial4/testgui.cpp 2 + + TestGui::testGui() 関数は2回実行されます。 + 関連する TestGui::testGui_data() + 関数で作成したテストデータの各エントリ毎にそれぞれ実行されます。 + + まず、\l QFETCH() マクロを使用して、データセットの2つの要素を取得します。 + \l QFETCH() は、要素のデータ型と要素名の2つの引数を取ります。 + 次に QLineEdit を作成し、 QTestEventList::simulate() 関数を使用して + ウィジェットにイベントのリストを適用します。 + + 最後に、 QCOMPARE() マクロを使用してラインエディットの文字列が正しいかどうか確認します。 + + これまでと同様に、 + テストケースを実行可能にするには、 + 以下の2行が必要です: + + \snippet examples/qtestlib/tutorial4/testgui.cpp 3 + + \l QTEST_MAIN() マクロは + すべてのテスト関数を実行するシンプルな + \c main() 関数に展開されます。 + テストクラスの宣言と実装が \c .cpp ファイルに存在する場合、 + Qt のメタオブジェクト機能を動作させるために、 + 生成された moc ファイルを include する必要があります。 +*/ + +/*! + \example qtestlib/tutorial5 + + \previouspage {第4章: GUI イベントの再現}{第4章} + \contentspage {QTestLib チュートリアル}{目次} + + \title 第5章: ベンチマークの作成 + + 最終章となる本章では QTestLib を使ってベンチマークを作成する方法について説明します。 + + \section1 ベンチマークの作成 + ベンチマークを作成するには QBENCHMARK マクロを用いてテスト関数を拡張します。 + ベンチマークテスト関数には通常、テストの準備コードと測定するコードを含む + QBENCHMARK マクロが一つ含まれます。 + QString::localeAwareCompare() のベンチマークを行う関数は以下のようになります。 + + \snippet examples/qtestlib/tutorial5/benchmarking.cpp 0 + + 測定の準備は関数の最初に行われています。 + この時点では測定は始まっていません。 + QBENCHMARK マクロで囲まれたブロックの中身のみが計測されます。 + このブロックの内部は正確な測定を行うために、何度か繰り返し実行される場合があります。 + + \l {testlib-benchmarking-measurement}{ベンチマークの方法}(バックエンド)は何種類か用意されており、 + コマンドライン引数から選択することが出来ます。 + + \section1 データ関数 + + データ関数は複数のデータでベンチマークを行うテストを作成するのに有用です。 + たとえば、ロケール準拠と標準的な比較を行う場合は以下のようになります。 + + \snippet examples/qtestlib/tutorial5/benchmarking.cpp 1 + + テスト関数ではデータに従ってベンチマークする手法を決定します。 + + \snippet examples/qtestlib/tutorial5/benchmarking.cpp 2 + + "if (useLocaleCompare)" 文はそのオーバヘッドを測定対象外とするために + QBENCHMARK マクロのブロックの外部にあります。 + ベンチマークの実行時にはそれぞれどちらか一つの QBENCHMARK マクロが実行されます。 + + \section1 外部ツール + + テストデータの可視化を行うためのツールが Qt Labs Web サイトの + \l{qtestlib-tools} プロジェクトに含まれています。 + そこには実行したテストの結果からパフォーマンスを比較したり、 + パフォーマンスのWeb用グラフを作成するツールが含まれています。 + + それらのツールの詳細と簡単なグラフの例は + \l{qtestlib-tools Announcement} を参照してください。 + +*/ + + + |