Qt に関する技術資料 株式会社 脇電業商会 汎用事業部 【目 次】 はじめに ...............................................................................................................................3 【1】Qtとは ......................................................................................................................... 4 【2】Qtアプリケーション.................................................................................................... 5 【3】シグナル関数とスロット関数 .................................................................................... 11 [例 1] ラジオボタンの相互制御 ...................................................................................... 11 [例 2] タイマーによる秒数表示 ...................................................................................... 14 【4】主なウィジェット ...................................................................................................... 20 [A] QWidgetクラス ......................................................................................................... 21 [B] QButtonクラス ......................................................................................................... 22 [C] QCheckBoxクラス .................................................................................................... 22 [D] QPushButtonクラス ................................................................................................ 23 [E] QRadioButtonクラス................................................................................................ 23 [F] QComboBoxクラス ................................................................................................... 24 [G] QDialogクラス.......................................................................................................... 25 [H] QLabelクラス ........................................................................................................... 25 [I] QTextBrowserクラス................................................................................................. 27 [J] QLineEditクラス....................................................................................................... 28 [K] QScrollBarクラス..................................................................................................... 29 【5】スタイル .................................................................................................................... 31 【6】パレット .................................................................................................................... 35 【7】プロセス間通信 ......................................................................................................... 37 【8】イベント .................................................................................................................... 40 【9】機能制限によるライブラリサイズの削減 .................................................................. 42 【10】その他のクラス ....................................................................................................... 43 [A] QStringクラス / QCStringクラス............................................................................ 43 [B] QRegExpクラス........................................................................................................ 44 [C] QColorクラス............................................................................................................ 44 [D] QBrushクラス .......................................................................................................... 45 [E] QFontクラス............................................................................................................. 45 [F] QPainterクラス ........................................................................................................ 46 [G] QPixmapクラス........................................................................................................ 48 [H] QMovieクラス .......................................................................................................... 48 [I] QStringListクラス..................................................................................................... 48 [J] QMap ........................................................................................................................ 49 [K] QTimerクラス .......................................................................................................... 50 2 はじめに 【商標について】 本資料に記載されている製品名はその開発元の商標又は登録商標です。 本資料に記載されている商品名、団体名等は本資料の作成目的でのみ記載しており 商標権を侵害する目的ではない事をはじめに申しておきます。 3 【1】Qt とは Qtは、ノルウェーのTrolltech社 が開発したC++ベースのGUIツールキットである。Qtがサ ポートしているプラットフォームは、Windows、UNIX/Linux、Embedded、MacOSであ り、高い移植性を持つ。 Qt/Embedded は、組み込み Linux に特化して提供される Qt で、メモリや CPU などのマ シンリソースが少ない環境で使用することを前提としている。特に、Linux カーネルの API を使用してフレームバッファへ直接描画するため、X Window システムを必要としない。そ の他、機能がモジュール単位で実装されているので、使用しない機能を除外しメモリ使用 量を抑えることが可能である。 また Qt/Embedded を使用して開発された PDA 向けアプリケーション環境に Qtopia があ る。Qtopia は、PIM(Personal Information Manager)やテキストエディタ、アクセサリ など PDA モバイル機器向けアプリケーションなどを含んでいる。qvfb(Qt/Embedded Virtual FrameBuffer)を使用すれば、X Window System 上で動作させることも可能である。 4 【2】Qt アプリケーション 本章では、Qt によるアプリケーションの実装方法について述べる。 Qt アプリケーションは QApplication オブジェクトにより制御される。したがって、1つ の Qt アプリケーションに対して、QApplication オブジェクトを1つ用意する必要がある。 以下に、サンプルコードを示す。 [サンプルコード 1 ] #include <qapplication.h> int main(int argc, char **argv) { QApplication app(argc, argv); return app.exec(); } main 関数において、QApplication オブジェクトを生成する。QApplication オブジェクト のコンストラクタの引数は、コマンドライン引数である。また、main 関数の最後で必ず QApplication の exec メソッドをコールする。このメソッドをコールすることにより、Qt アプリケーションはイベントループ状態に入る。 サンプルコード1では、Qt アプリケーションはイベントループ状態に入るが、この Qt ア プリケーションを終了させる方法がない。ウィジェットを用いた GUI 操作により Qt アプ リケーションを終了させるプログラムを次に示す。 [サンプルコード 2 ] #include <qapplication.h> #include <qwidget.h> #include <qpushbutton.h> int main(int argc, char **argv) { QApplication app(argc, argv); 5 /* 基礎ウィンドウを生成 */ QWidget MyWidget(NULL, “MyWidget”); MyWidget.setGeometry(50,100,100,50); /* プッシュボタンを生成 */ QPushButton MyButton(&MyWidget, “MyButton”); MyButton.setGeometry(15,10,70,30); /* アプリケーションのメインウィジェットを設定 */ app.setMainWidget(&MyWidget); /* シグナル・スロットの登録 */ QObject::connect(&MyButton, SIGNAL(clicked()), &app, SLOT(quit())); /* ウィジェットを表示 */ MyWidget.show(); return app.exec(); } 上記プログラムを実行すると、以下のようなウィジェットが表示される。 ウィンドウの中央にプッシュボタンが一つ表示されていて、このプッシュボタンを押下す ると Qt アプリケーションが終了する、というプログラムである。コードについて説明を行 う。 始めに、 QApplication app(argc, argv); で、QApplication オブジェクトを生成する。 6 次の、 QWidget MyWidget(NULL, “MyWidget”); で変数名 MyWidget の QWidget オブジェクトを生成する。QWidget は基本ウィンドウク ラスである。コンストラクタの第 1 引数は親ウィジェットのアドレスであり、ここでは NULL としている。第 2 引数はオブジェクト名であり、ここでは”MyWidget”としている。 基本ウィンドウを生成したら、次には基本ウィンドウのジオメトリ(表示位置)を指定する。 MyWidget.setGeometry(50,100,100,50); setGeometry メソッドはジオメトリを指定する関数であり、引数は順番に、x 座標、y 座標、 幅、高さである。 次に、プッシュボタンを生成する。 QPushButton MyButton(&MyWidget, “MyButton”); プッシュボタンは、QPushButton クラスが提供している。生成の方法は MyWidget と同じ である。しかしここでは、第1引数に MyWidget オブジェクトのアドレスを渡している。 すなわち、MyButton オブジェクトの親ウィジェットとして、基本ウィンドウである MyWidget オブジェクトが指定されている。このように、オブジェクト生成時に親ウィジェ ットのアドレスを渡すことにより、MyWidget オブジェクトと MyButton オブジェクトが 一つのウィジェットとして扱われるようになる。プッシュボタンを生成したら、プッシュ ボタンのジオメトリを指定する。 MyButton.setGeometry(15,10,70,30); setGeometry メソッドにてジオメトリを指定するが、MyButton オブジェクトはその親ウ ィジェットが MyWidget オブジェクトであるので、MyWidget オブジェクトの左上座標が 原点とみなされる。 次に、 app.setMainWidget(&MyWidget); で、MyWidget オブジェクトをこの Qt アプリケーションのメインウィジェットとしている。 このプログラムでは、プッシュボタンが押下されると Qt アプリケーションを終了させるが、 それを次の行で実現する。 QObject::connect(&MyButton, SIGNAL(clicked()), &app, SLOT(quit())); Qt においては、オブジェクト間通信を実現する際にシグナル関数とスロット関数という 2 種類の関数を用いる。シグナル関数とスロット関数に関しては、次章で詳細に説明する。 この行により、MyButton オブジェクトが押下されると、アプリケーションが終了する。 そして、MyWidget オブジェクトを表示させる。 MyWidget.show(); ウィジェットを表示させるには show メソッドをコールするが、親ウィジェットの show メ ソッドをコールすれば、すべての子ウィジェットも表示される。したがって、MyButton オブジェクトに対して show メソッドをコールする必要はない(MyButton オブジェクトは 7 MyWidget オブジェクトの子ウィジェットであるため)。 最後に、Qt アプリケーションをイベントループ状態にする。 return app.exec(); プログラムを実行すると、MyWidget オブジェクト上に MyButton オブジェクトが表示さ れる。Qt アプリケーションはイベントループ状態に入っているため、何らかのイベントが 実行されない限り何も起こらない。このプログラムでは、MyButton オブジェクトを押下す ることにより Qt アプリケーションが終了するイベントが起こるのみである。実際、プッシ ュボタンを押下すれば Qt アプリケーションは終了し、ウィジェットは消える。 サンプルコード 2 では、main 関数にて MyWidget オブジェクトと MyButton オブジェク トを生成し親子関係を構築していたが、プッシュボタンをメンバとしてもつ QWidget のサ ブクラスを定義し、実装したプログラムを次に示す。 [サンプルコード 3 ] #include <qapplication.h> #include <qwidget.h> #include <qpushbutton.h> /* クラス定義 */ class CustomWidget1 : public QWidget { public: CustomWidget1(QWidget *, char*); /* コンストラクタ */ ~CustomWidget1(); /* デストラクタ */ private: QPushButton *MyButton; /* プッシュボタン */ }; /* コンストラクタ */ CustomWidget1::CustomWidget1(QWidget *parent, char *name) : QWidget(parent, name) { /* ジオメトリ設定 */ setGeometry(50,100,100,50); /* プッシュボタン生成 */ MyButton = new QPushButton(this, “MyButton”); 8 MyButton->setGeometry(15,10,70,30); /* シグナル・スロットの登録 */ connect(MyButton, SIGNAL(clicked()), qApp, SLOT(quit())); } /* デストラクタ */ CustomWidget1::~CustomWidget1() { /* プッシュボタンメモリ解放 */ delete MyButton; } int main(int argc, char **argv) { QApplication app(argc, argv); /* カスタムウィジェット生成 */ CustomWidget1 MyWidget(NULL, “MyWidget”); /* メインウィジェット生成 */ app.setMainWidget(&MyWidget); /* カスタムウィジェット表示 */ MyWidget.show(); return app.exec(); } サンプルソース 3 の動作は、サンプルソース 2 と全く同じである。 サンプルソース 3 では、QPushButton オブジェクトを private メンバにもつクラス CustomWidget1 を定義している。CustomWidget1 クラスは QWidget クラスを継承してい るので、CustomWidget1 オブジェクトも当然一つのウィジェットである。サンプルソース 3 について説明を行う。 まず CustomWidget1 クラスは、メンバに変数名 MyButton の QPushButton オブジェクト 9 ポインタを持つ。CustomWidget1 クラスのコンストラクタは、親ウィジェットのアドレス とオブジェクト名を引数にもち、それをそのまま QWidget クラスのコンストラクタに渡す。 コンストラクタでは QPushButton オブジェクトを生成しているが、第1引数に this ポイ ンタを渡しているので、CustomWidget1 オブジェクトが親ウィジェットである。また、コ ンストラクタで connect 関数をコールしている。QWidget クラスは QObject クラスを継承 しているので、connect 関数を直接コールすることができる。サンプルコード 2 とは異なり、 connect 関数の第 3 引数が qApp となっている。qApp は、Qt アプリケーション内の QApplication オブジェクトのアドレスを指すグローバル変数である。したがって qApp は main 関数の app を指す。したがって、MyButton オブジェクトを押下すればこの Qt アプ リケーションは終了する。 CustomWidget1 クラスのデストラクタでは、MyButton オブジェクトのメモリを解放して いる。 main 関数では、変数名 MyWidget の CustomWidget1 オブジェクトを生成し、これを Qt アプリケーションのメインウィジェットとして表示させたあと、イベントループ状態にし ている。そしてボタンを押下すれば、Qt アプリケーションは終了する。 10 【3】シグナル関数とスロット関数 前章では、プッシュボタンを押下して Qt アプリケーションを終了させる仕組みを実装する 際に、シグナル関数、スロット関数を用いた。 QObject::connect(&MyButton, SIGNAL(clicked()), &app, SLOT(quit())); 本章では、シグナル関数とスロット関数を用いたオブジェクト間通信について述べる。 シグナル関数は、クラスのメンバ関数で、オブジェクトの内部状態が変化する(ボタンが押 下される、スクロールバーを移動させる、など)と自動的にコールされる(これをシグナルが 送信されるという)。 スロット関数もクラスのメンバ関数である。こちらは自動的にコールされることはない。 スロット関数は、送信されたシグナルを受信するための関数である。 オブジェクト間通信を行うためには、送信されたシグナルを受信しなければならない。シ グナルを受信するために、connect 関数を用いて、シグナル関数とスロット関数の関連付け を行う。 QObject::connect(&MyButton, SIGNAL(clicked()), &app, SLOT(quit())); この例では、clicked メソッドが QPushButton クラスのシグナル関数である。このシグナ ルはプッシュボタンをクリックする(押してから離す)ことにより送信される。また、quit メ ソッドは QApplication クラスのスロット関数である。このスロット関数は Qt アプリケー ションを終了させる。上記のように connect 関数によってシグナル関数とスロット関数の 関連付けを行うことにより、プッシュボタンのクリック操作により送信されたシグナルを QApplication オブジェクトが受信し、Qt アプリケーションを終了させる。 connect 関数でシグナル関数とスロット関数の関連付けを行う場合、シグナル関数とスロッ ト関数の引数の型が一致していなければならない。シグナル関数とスロット関数の型が異 なる場合は、コンパイルエラーとはならないがスロット関数は実行されない。 シグナル関数とスロット関数は Qt の各クラスですでに用意されている。しかし、自分でシ グナル関数やスロット関数を定義したい場合がある。Qt では、自分でシグナル関数やスロ ット関数を定義することができる。次に、スロット関数を定義し利用する方法について述 べる(シグナル関数を定義することもできるが、本開発では利用しなかったため説明は省 略する)。以下では、自分で定義したスロット関数をカスタムスロット関数と呼ぶ。 [例 1] ラジオボタンの相互制御 11 2 つのラジオボタンに対して、片方のラジオボタンを押下したら他方のラジオボタンのチェ ックをはずすようなプログラムを考える。 [サンプルプログラム 4 ] #include <qapplication.h> #include <qwidget.h> #include <qradiobutton.h> /* クラス宣言 */ class CustomWidget2 : public QWidget { Q_OBJECT public: CustomWidget2(QWidget*, char *); /* コンストラクタ */ ~CustomWidget2(); /* デストラクタ */ private: QRadioButton *button1; /* ラジオボタン(左) */ QRadiobutton *button2; /* ラジオボタン(右) */ public slots: void button1_slot(void); /* ラジオボタン(左)用スロット */ void button2_slot(void); /* ラジオボタン(右)用スロット */ }; /* コンストラクタ */ CustomWidget2::CustomWidget2(QWidget *parent, char *name) : QWidget(parent, name) { /* ジオメトリ設定 */ setGeometry(0, 0, 100, 200); /* ラジオボタン生成 */ button1 = new QRadioButton(this, “button1”); button2 = new QRadioButton(this, “button2”); 12 button1->setGeometry(0, 0, 100, 100); button2->setGeometry(0, 100, 100, 100); /* シグナル・スロットの登録 */ connect(button1, SIGNAL(clicked()), this, SLOT(button1_slot())); connect(button2, SIGNAL(clicked()), this, SLOT(button2_slot())); /* ラジオボタンの状態設定 */ button1->setChecked(TRUE); /* ラジオボタン(左)はチェックする*/ button2->setChecked(FALSE); /* ラジオボタン(右)はチェックしない*/ } /* デストラクタ */ CustomWidget2::~CustomWidget2() { /* オブジェクトのメモリ解放 */ delete button1; delete button2; } /* ラジオボタン(左)用カスタムスロット関数 */ void CustomWidget2::button1_slot(void) { button1->setChecked(TRUE); /* ラジオボタン(左)はチェックする */ button2->setChecked(FALSE); /* ラジオボタン(右)はチェックしない*/ } /* ラジオボタン(右)用カスタムスロット関数 */ void CustomWidget2::button2_slot(void) { button1->setChecked(FALSE); /* ラジオボタン(左)はチェックしない*/ button2->setChecked(TRUE); /* ラジオボタン(右)はチェックする */ } int main(int argc, char **argv) { 13 QApplication app(argc, argv); /* カスタムウィジェット生成 */ CustomWidget2 MyWidget; /* メインウィジェット設定 */ app.setMainWidget(&MyWidget); /* カスタムウィジェット表示 */ MyWidget.show(); return app.exec(); } 新しく CustomWidget2 クラスを宣言した。このクラスは、button1(左側)と button2(右側) の 2 つのラジオボタンをもつクラスである。また、button1_slot, button2_slot という 2 つ のスロット関数を定義している。なお、カスタムスロット関数を定義する際には、クラス 宣言の中で Q_OBJECT というマクロを記述し、 public slots という領域に関数を宣言する。 これにより、button1_slot と button2_slot の 2 つの関数は、スロット関数として使用する ことができる(public 関数として直接コールすることもできる)。 CustomWidget2 クラスのコンストラクタでは、2 つのラジオボタンを生成し、connect 関 数により、シグナル関数とカスタムスロット関数の関連付けを行っている。また、 QRadioButton クラスの setChecked メソッドにより、左側のラジオボタンはチェックされ た状態、右側のラジオボタンはチェックを外した状態をデフォルトとしている。またデス トラクタでは、2 つのラジオボタンオブジェクトのメモリを解放している。 次に、カスタムスロット関数の定義を行う。カスタムスロット関数もクラスのメンバ関数 であるので、メンバ関数として記述すればよい。なお、button1_slot は左側のラジオボタ ンのみをチェックした状態にする処理を、また button2_slot は右側のラジオボタンのみを チェックした状態にする処理を記述している。 最後に main 関数で、CustomWidget2 クラスオブジェクトを生成し、表示させた後、イベ ントループ状態にしている。 [例 2] タイマーによる秒数表示 14 Start プッシュボタンを押下するとタイマーが起動し、1 秒おきに経過時間を表示し、Stop プッシュボタンを押下するとタイマーが終了するようなプログラムを考える。 [サンプルプログラム 5 ] #include <qapplication.h> #include <qwidget.h> #include <qlabel.h> #include <qpushbutton.h> #include <qtimer.h> class CustomWidget3 : public QWidget { Q_OBJECT public: CustomWidget3(QWidget *, char *); /* コンストラクタ */ ~CustomWidget3(); /* デストラクタ */ private: QLabel *label; /* ラベル */ QPushButton *start_button; /* Start ボタン */ QPushButton *stop_button; /* Stop ボタン */ QTimer *timer; /* タイマー */ int value; /* カウンタ */ public slots: void start_button_slot(void); /* Start ボタン用スロット */ void stop_button_slot(void); /* Stop ボタン用スロット */ void timer_start(void); /* タイマー用スロット */ }; /* コンストラクタ */ 15 CustomWidget3::CustomWidget3(QWidget *parent, char *name) : QWidget(parent, name) { /* ジオメトリ設定 */ setGeometry(0, 0, 300, 300); /* ラベル生成 */ label = new QLabel(this, “label”); label->setGeometry(50, 20, 200, 60); /* Start ボタン生成 */ start_button = new QPushButton(this, “start_button”); start_button->setGeometry(50, 100, 50, 50); start_button->setText(“Start”); /* ボタンに文字列設定 */ start_button->setEnabled(TRUE); /* ボタンを有効化 */ /* Stop ボタン生成 */ stop_button = new QPushButton(this, “stop_button”); stop_button->setGeometry(150, 100, 50, 50); stop_button->setText(“End”); /* ボタンに文字列設定 */ stop_button->setEnabled(FALSE); /* ボタンを無効化 */ /* タイマー生成 */ timer = new QTimer(this, “timer”); /* カウンタを初期化 */ value = 0; /* シグナル・スロットの登録 */ connect(start_button, SIGNAL(clicked()), this, SLOT(start_button_slot())); connect(stop_button, SIGNAL(clicked()), this, SLOT(stop_button_slot())); connect(timer, SIGNAL(timeout()), this, SLOT(timer_slot())); } 16 /* デストラクタ */ CustomWidget3::~CustomWidget3() { /* オブジェクトのメモリ解放 */ delete label; delete start_button; delete stop_button; delete timer; } /* Start ボタン用カスタムスロット関数 */ void CustomWidget3::start_button_slot(void) { /* カウンタ初期化 */ value = 0; /* タイマー起動 */ timer->start(1000, FALSE); /* ボタンの有効無効設定 */ start_button->setEnabled(FALSE); /* Start ボタンは無効 */ stop_button->setEnabled(TRUE); /* Stop ボタンは有効 */ } /* Stop ボタン用カスタムスロット関数 */ void CustomWidget3::stop_button_slot(void) { /* タイマー停止 */ timer->stop(); /* ボタンの有効無効設定 */ start_button->setEnabled(TRUE); /* Start ボタンは有効 */ stop_button->setEnabled(FALSE); /* Stop ボタンは無効 */ } /* タイマー用カスタムスロット関数 */ void CustomWidget3::timer_slot(void) 17 { /* 文字列の初期化 */ QString str = “”; /* カウンタをインクリメント */ value++; /* カウンタ値を文字列に変換 */ str.setNum(value); /* ラベルに文字列を設定 */ label->setText(str); } int main(int argc, char **argv) { QApplication app(argc, argv); /* カスタムウィジェット生成 */ CustomWidget3 MyWidget; /* メインウィジェット設定 */ app.setMainWidget(&MyWidget); /* カスタムウィジェット表示 */ MyWidget.show(); return app.exec(); } CustomWidget3 クラスを宣言した。このクラスは、ラベル(秒数表示用)、2 つのプッシュ ボタン(Start ボタンと Stop ボタン)、タイマー、そしてカウンタをメンバに持つ。そして、 Start ボタン押下用、Stop ボタン押下用、タイマーのタイムアウト用の 3 つのスロット関 数を宣言している。 コンストラクタでは、ラベルオブジェクトの生成、2 つのプッシュボタンオブジェクトの生 成、ボタン文字列のセット(setText)、ボタンの有効/無効のセット(setEnabled)、タイマー 18 オブジェクトの生成、カウンタの初期化、そしてシグナル関数とカスタムスロット関数の 関連付けを行っている。ここで、QTimer クラスの timeout シグナルは、タイマーがタイム アウトしたときに送信されるシグナルである。デストラクタでは、各オブジェクトのメモ リ解放を行う。 次に、カスタムスロット関数を定義する。start_button_slot メソッドは Start ボタンが押 下された際に実行されるカスタムスロット関数である。ここでは、カウンタの初期化を行 い、1000 ミリ秒(1 秒)のタイマーを起動させる。そして、Start ボタンを無効に、Stop ボタ ンを有効にする。stop_button_slot メソッドは Stop ボタンが押下された際に実行されるカ スタムスロット関数であるが、ここではタイマーを停止させ、Start ボタンを有効に、Stop ボタンを無効にする。 3 番目のカスタムスロット関数である timer_slot メソッドは、タイマーがタイムアウトし た際に実行されるカスタムスロット関数である。この関数では、カウンタをインクリメン トし、その値を文字列に変換してラベルにセットしている。 main 関数は、CustomWidget3 クラスオブジェクトを生成、表示させている。 19 【4】主なウィジェット 前章までで、すでに QWidget, QPushButton, QRadioButton, QLabel などのウィジェット を紹介した。本章では、本開発で使用したウィジェットを紹介する。 ウィジェット(Widget)とは、小規模 GUI アプリケーションのことを指す。Qt においては QWidget クラスがウィジェットのベースクラスであり、以下のような派生クラスをもつ。 [クラス図 (一部抜粋)] QWidget QButton QCheckBox QPushButton QRadioButton QComboBox QDialog QFrame QLabel QTextBrowser QLineEdit QScrollBar 以下では、上記クラスに関して述べる。 20 [A] QWidget クラス QWidget クラスは、すべてのウィジェットの基 礎クラスである。すべてのウィジェットは、オ ブジェクト生成時に親ウィジェットのアドレス を渡す。親ウィジェットのアドレスを渡すこと により、複数のウィジェットを1つのウィジェ ットとして扱うことができる。 QWidget::QWidget ( QWidget *, char * ) コンストラクタ。第 1 引数は親ウィジェットの アドレス。第 2 引数はオブジェクト名。 void QWidget::setStyle ( QStyle * ) スタイルを設定する。スタイルに関しては後述。 virtual void QWidget::setPalette ( const QPalette & ) パレットを設定する。パレットに関しては後述。 virtual void QWidget::setFont ( const QFont & ) フォントを設定する。 virtual void QWidget::setGeometry ( int , int , int , int ) ウィジェットのジオメトリを設定する。第 1 引数は x 座標、第 2 引数は y 座標、第 3 引数 は幅、第 4 引数は高さ。 virtual void QWidget::setEnabled ( bool ) 引数が TRUE の場合はウィジェットを有効に、FALSE の場合は無効にする。 virtual void QWidget::show ( void ) ウィジェットを表示する。 virtual void QWidget::hide ( void ) ウィジェットを背面化する。 virtual void QWidget::setWFlags ( WFlags ) 21 ウィジェットのプロパティを設定する。引数の主な値は以下の通り。 Qt::WType_Modal モーダルウィジェットにする Qt::WStyle_NoBorder タイトルバーを非表示にする Qt::WStyle_StaysOnTop 最前面に表示させる [B] QButton クラス QButton クラスは、ボタンの抽象基礎クラスである。 virtual void QButton::setText ( const QString & ) ボタンに文字列を設定する。 virtual void QButton::setPixmap ( const QPixmap & ) ボタンに画像を設定する。 void QButton::pressed( void ) ボタンを押下した際に送信されるシグナル。 void QButton::released( void ) ボタンを離した際に送信されるシグナル。 void QButton::clicked( void ) ボタンを押下してから離した際に送信されるシグナル。 [C] QCheckBox クラス QCheckBox クラスは、テキスト付きのチェックボックスを提供する。 チェックボックスは押下により、チェックボックスの ON/OFF が切り 替わる。 QCheckBox::QCheckBox( QWidget*, const char* ) コンストラクタ。チェックボックスを生成する。第1引数は親ウィジェットのアドレス。 第2引数はオブジェクト名。 22 bool QCheckBox::isChecked( void ) チェックボックスがチェックされていれば TRUE を、チェックされていなければ FALSE を返す。 void QCheckBox::setChecked( bool ) 引数が TRUE ならばチェックボックスをチェックし、FALSE ならばチェックをはずす。 [D] QPushButton クラス QPushButton クラスは、プッシュボタンを提供する。プッシュボタ ンには、文字列もしくは Pixmap のいずれかを表示させることがで きる。 QPushButton::QPushButton( QWidget *, const char * ) コンストラクタ。プッシュボタンを生成する。第1引数は親ウィジェット、第2引数はオ ブジェクト名。 [E] QRadioButton クラス QRadioButton クラスは、テキスト付きのラジオボタンを提供する。ラ ジオボタンはチェックボックスと同様、ボタンの押下によりチェックの ON/OFF が切り替わる。 QRadioButton::QRadioButton( QWidget*, const char * ) コンストラクタ。ラジオボタンを生成する。第1引数は親ウィジェット、第2引数はオブ ジェクト名。 bool QRadioButton::isChecked( void ) ラジオボタンがチェックされていれば TRUE を、チェックされていなければ FALSE を返 す。 virtual void QRadioButton::setChecked( bool ) 引数が TRUE ならばラジオボタンをチェックし、FALSE ならばチェックをはずす。 23 [F] QComboBox クラス QComboBox クラスは、コンボボックスを提供する。コンボボ ックスは、複数のアイテムから一つのアイテムを選択すること が可能である。 QComboBox::QComboBox( QWidget *, const char * ) コンストラクタ。コンボボックスを生成する。第1引数は親ウィジェット、第2引数はオ ブジェクト名。 void QComboBox::insertItem( const QString &, int ) コンボボックスに文字列を挿入する。第1引数は文字列、第2引数はインデックスとなる。 インデックスは 0 オリジンで、インデックス順にリストが表示される。またインデックス が負の場合は、リストの最後に挿入される。 void QComboBox::insertItem( const QPixmap &, int ) コンボボックスに Pixmap を挿入する。第1引数は Pixmap、第2引数はインデックスとな る。インデックスは 0 オリジンで、インデックス順にリストが表示される。またインデッ クスが負の場合は、リストの最後に挿入される。 void QComboBox::insertItem( const QPixmap &, const QString &, int ) コンボボックスに Pixmap と文字列を挿入する。第1引数 Pixmap、第2引数が文字列、第 3引数がインデックスである。Pixmap がリストの左側に、文字列が右側に表示される。イ ンデックスは 0 オリジンで、インデックス順にリストが表示される。またインデックスが 負の場合は、リストの最後に挿入される。 void QComboBox::clear( void ) コンボボックスに挿入されたアイテムをすべて破棄する。 int QComboBox::count( void ) コンボボックスに挿入されたアイテム数を返す。 void QComboBox::removeItem( int ) 引数で指定されたインデックスに対応するアイテムを削除する。 24 virtual void setCurrentItem ( int ) 引数で指定されたインデックスに対応するアイテムをカレントアイテムにする。 int QComboBox::currentItem ( void ) カレントアイテムのインデックスを返す。 virtual void QComboBox::setSizeLimit ( int ) アイテムリストに表示されるアイテム数を引数の値に設定する。デフォルト設定は 10。 int QComboBox::sizeLimit ( void ) アイテムリストに表示されるアイテム数を返す。 virtual void setMaxCount ( int ) アイテムリストに挿入可能なアイテム数を設定する。デフォルトは無制限。 int QComboBox::maxCount ( void ) アイテムリストに挿入可能なアイテム数を返す。 [G] QDialog クラス QDialog クラスは、ダイアログウィンドウを提供する。QWidget との違いは、モーダル指 定ができることである。モーダル指定はオブジェクト生成時に行う。モーダル指定がなさ れると、ダイアログ以外の入力がブロックされる。ただし、モーダル指定を行っても、別 のプロセスのウィジェットに対する入力はブロックされない。 QDialog::QDialog( QWidget*, const char*, bool ) コンストラクタ。ダイアログを生成する。第1引数は親ウィジェット。第2引数はオブジ ェクト名。第3引数はモーダル指定(TRUE ならばモーダルダイアログ、FALSE ならばモ ードレスダイアログとなる)。 [H] QLabel クラス QLabel ウィジェットは、文字列、Pixmap、動画(アニメーショ ン GIF)などを表示させることができる。 25 QLabel::QLabel( QWidget*, const char* ) コンストラクタ。ラベルオブジェクトを生成する。第1引数は親ウィジェット。第2引数 はオブジェクト名。 virtual void QLabel::setText ( const QString & ) ラベルに文字列を設定する。スロット関数である。 QString QLabel::text ( void ) ラベルに設定された文字列を返す。 virtual void QLabel::setPixmap ( const QPixmap & ) ラベルに画像を設定する。スロット関数である。 QPixmap* QLabel::pixmap ( void ) ラベルに設定された画像を返す。 virtual void QLabel::setMovie ( const QMovie & ) ラベルに動画(アニメーション GIF など)を設定する。スロット関数である。 QMovie* QLabel::movie ( void ) ラベルに設定された動画を返す。 virtual void QLabel::setAlignment ( int ) ラベルのアラインメントを設定する。引数値は以下の通り。 [水平方向] AlignLeft : 左端にそろえて配置する AlignRight : 右端にそろえて配置する AlignHCenter : 水平方向の中央に配置する [垂直方向] AlignTop : 上端にそろえて配置する AlignBottom : 下端にそろえて配置する AlignVCenter : 垂直方向の中央に配置する 26 [水平/垂直方向] AlignCenter : 水平垂直方向の中央に配置する int QLabel::alignment ( void ) ラベルに設定されているアラインメント情報を返す。 [I] QTextBrowser クラス QTextBrowser クラスはリッチテキストを表示させ ることができるブラウザを提供する。またテキスト サイズにあわせてスクロールバーが自動的に表示さ れる。 QTextBrowser::QTextBrowser( QWidget *, char* ) コンストラクタ。第 1 引数は親ウィジェットのアドレス。第 2 引数はオブジェクト名。 virtual void QTextBrowser::setText ( const QString & ) テキストを設定する。 void QTextBrowser::setVScrollBarMode ( ScrollBarMode ) 垂直スクロールバーのプロパティを設定する。引数の値は以下の通り。 Auto テキストサイズにあわせて、必要ならばスクロールバーを表示させる。 AlwaysOff 常に非表示にする AlwaysOn 常に表示する void QTextBrowser::setHScrollBarMode ( ScrollBarMode ) 水平スクロールバーのプロパティを設定する。 QScrollBar* QTextBrowser::verticalScrollBar ( void ) const 垂直スクロールバーのアドレスを返す。 QScrollBar* QTextBrowser::horizontalScrollBar ( void ) const 水平スクロールバーのアドレスを返す。 27 [J] QLineEdit クラス QLineEdit クラスは、一行表示のテキストエディタを提供する。 オブジェクトのアドレスを Qtopia のソフトキーボードアプリケー ションに渡すことにより、キーボードの入力を表示させることがで きる。 QLineEdit::QLineEdit( QWidget *, const char * ) コンストラクタ。テキストエディタを生成する。第1引数は親ウィジェット。第2引数は オブジェクト名。 virtual void QLineEdit::setText ( const QString & ) テキストエディタに文字列を設定する。スロット関数である。 QString QLineEdit::text ( void ) テキストエディタに設定されている文字列を返す。 void QLineEdit::setAlignment ( int ) テキストエディタのアラインメントを設定する。ただし水平方向のパラメータのみ有効で ある。 int QLineEdit::alignment ( void ) テキストエディタに設定されたアラインメント情報を返す。 void QLineEdit::backspace ( void ) カーソルの左にある文字を削除し、カーソルの位置を一つ左にずらす。 void QLineEdit::del ( void ) カーソルの右にある文字を削除する。 void QLineEdit::setEchoMode ( EchoMode ) テキストエディタのエコーモードを設定する。引数は以下の通り。 Normal : 入力した文字列をそのまま表示する。 NoEcho : 入力に対して何も表示しない。 Password : 入力された文字の代わりにアスタリスクを表示する。 28 EchoMode QLineEdit::echoMode ( void ) テキストエディタに設定されたエコーモードを返す。 void QLineEdit::textChanged ( const QString & ) テキストエディタに設定された文字列が変更された際に実行されるシグナル。引数は変更 後の文字列。 [K] QScrollBar クラス QScrollBar ウィジェットは、スクロールバーを提供する。水平方向のスクロー ルバーと垂直方向のスクロールバーを生成することが可能である。 QScrollBar::QScrollBar( QWidget *, const char * ) コンストラクタ。スクロールバーを生成する。第1引数は親ウィジェット。第 2 引数はオブジェクト名。 virtual void QScrollBar::setOrientation ( Orientation ) スクロールバーの方向(水平あるいは垂直)を設定する。引数は以下の通り。 Vertical : 垂直方向 Horizontal : 水平方向 Orientation QScrollBar::orientation ( void ) スクロールバーの方向を返す。 void QScrollBar::setMinValue ( int ) スクロールバーの最小値を設定する。 int QScrollBar::minValue( void ) スクロールバーの最小値を返す。 void QScrollBar::setMaxValue ( int ) スクロールバーの最大値を設定する。 int QScrollBar::maxValue( void ) スクロールバーの最大値を返す。 29 void QScrollBar::setLineStep ( int ) スクロールバーのラインステップ値(スクロールバーをスライドさせた際に変化する値)を 設定する。 int QScrollBar::lineStep( void ) スクロールバーのラインステップ値を返す。 void QScrollBar::setPageStep ( int ) スクロールバーのページステップ値(スクロールバーの上下ボタンを押下した際に変化する 値)を設定する。 int QScrollBar::pageStep( void ) スクロールバーのページステップ値を返す。 void QScrollBar::setValue( int ) スクロールバーの現状値を設定する。 int QScrollBar::value( void ) スクロールバーの現状値を返す。 void QScrollBar::valueChanged ( int ) スクロールバーの値が変更された際に発生するシグナル。引数は変更後のスクロールバー の値。 30 【5】スタイル Qt においては、GUI のルックアンドフィールのことをスタイルと呼ぶ。Qt にはいくつか のスタイルが存在し、ウィジェット毎に異なるスタイルを設定することも可能である。 Qt には以下のスタイルクラスがある。 [クラス図] QCDEStyle QStyle (抽象クラス) QInterlaceStyle QMotifStyle QMotifPlusStyle QCommonStyle (抽象クラス) QSGIStyle QWindowsStyle QPlatinumStyle 以下に、QPushButton, QLineEdit, QCheckBox, QComboBox, QRadioButton の各オブジ ェクトに、QMotifStyle と QWindowsStyle をセットした例を示す。 [QMotifStyle] [QWindowsStyle] 31 スタイルを設定するには、各スタイルクラスのオブジェクトを生成し、setStyle メソッドを コールする。QApplication クラスの setStyle をコールすれば、その Qt アプリケーション すべてのウィジェットに適用され、QWidget クラスの setStyle をコールすれば、そのウィ ジェットにのみ適用される。 [サンプルコード 6 ] #include <qapplication.h> #include <qwidget.h> #include <qpushbutton.h> #include <qwindowsstyle.h> int main(int argc, char **argv) { QApplication app(argc, argv); /* スタイル生成 */ QWindowsStyle MyStyle; /* スタイル設定 */ app.setStyle(&MyStyle); /* 基本ウィンドウ生成 */ QWidget MyWidget(NULL, “MyWidget”); MyWidget.setGeometry(50,100,100,50); /* プッシュボタン生成 */ QPushButton MyButton(&MyWidget, “MyButton”); MyButton.setGeometry(15,10,70,30); /* メインウィジェット設定 */ app.setMainWidget(&MyWidget); /* ウィジェット表示 */ MyWidget.show(); return app.exec(); } 32 [サンプルコード 7 ] #include <qapplication.h> #include <qwindowsstyle.h> #include <qwidget.h> #include <qpushbutton.h> int main(int argc, char **argv) { QApplication app(argc, argv); /* 基本ウィンドウ生成 */ QWidget MyWidget(NULL, “MyWidget”); MyWidget.setGeometry(50,100,100,50); /* プッシュボタン生成 */ QPushButton MyButton(&MyWidget, “MyButton”); MyButton.setGeometry(15,10,70,30); /* スタイル生成 */ QWindowsStyle MyStyle; /* スタイルを設定 */ MyButton.setStyle(&MyStyle); /* メインウィジェットを設定 */ app.setMainWidget(&MyWidget); /* ウィジェット表示 */ MyWidget.show(); return app.exec(); } 両方のサンプルコードにおいて、QWindowsStyle オブジェクトを生成し、setStyle をコー ルしているが、サンプルコード 6 では QApplication オブジェクトに対して、サンプルコー 33 ド 7 に対しては QPushButton オブジェクトに対して、setStyle をコールしている。したが って、サンプルコード 6 を実行すると、MyWidget と MyButton に QWindowsStyle が適 用されるが、サンプルコード 7 を実行すると、MyButton にのみ QWindowsStyle が適用さ れることになる。 34 【6】パレット パレット(QPalette)を用いると、ウィジェットのさまざまな部分の色を設定することができ る。 ウィジェットは以下の内部状態をもつ。 active … フォーカスがあたった状態 inactive … フォーカスがあたっていない状態 disable … 操作が不可能な状態 それぞれの状態に対して、カラーグループ(QColorGroup)を生成する。カラーグループは、 以下の ColorRole をもつ。 Background … 背景色 Foreground … 前景色 Base … テキストエントリウィジェット(QLineEdit など)の背景色 Text … テキストエントリウィジェットの前景色 Button … ボタンの前景色 ButtonText … ボタンテキストの前景色 Highlight … 選択アイテムの前景色 HighlightText … 選択アイテム文字列の前景色 パレットを生成するには、まずアクティブ状態、非アクティブ状態、操作不能状態の 3 つ のカラーグループを生成する。そしてそのカラーグループをパレットオブジェクトに設定 する。 次のサンプルコードは、カラーグループを生成するサンプルコードである。 [サンプルコード 8 ] #include <qpalette.h> QPalette pal; QColorGroup cg; /* アクティブ状態カラーグループを生成 */ cg.setColor( QColorGroup::Background, QColor(100,100,100)); cg.setColor( QColorGroup::Foreground, QColor(50,50,50)); cg.setColor( QColorGroup::Base, QColoe(200,200,200)); … /* アクティブ状態カラーグループをパレットに設定 */ 35 pal.setActive(cg); /* 非アクティブ状態カラーグループを生成 */ cg,setColor( QColorGroup::Background, QColor(20,20,20)); … /* 非アクティブカラーグループをパレットに設定 */ pal.setInactive(cg); /* 操作不能状態カラーグループを生成 */ cg.setColor( QColorGruop::Background, QColor(30,30,30)); … /* 操作不能状態カラーグループをパレットに設定 */ pal.setDisabled(cg); QPalette の setActive, setInactive, setDisable メソッドにて、各状態のカラーグループを 設定する。 上記にて生成したパレットは、QApplication クラスの setPalette メソッド、もしくは QWidget クラスの setPalette により設定する。QApplication クラスの setPalette メソッド を使用すれば、その Qt アプリケーションのすべてのウィジェットに適用され、QWidget クラスの setPalette メソッドをコールすれば、そのウィジェットにのみ適用される。 36 【7】プロセス間通信 Qt/Embedded では、プロセス間通信を行う際に QCopChannel クラスを使用する。 QCopChannel オブジェクトは 1 つのチャネル名を持つ。送信側、受信側おのおので同一の チャネル名をもつ QCopChannel オブジェクトを生成する。送信側は、send メソッドにて メッセージを送信する。受信側は received メソッドでメッセージを受信する。received メ ソッドはシグナル関数であるので、実際にメッセージを受信するためには、received メソ ッドをオーバーロードするか、カスタムスロット関数を用意しなければならない。 QCopChannel::QCopChannel( const QCString & , QObject * , const char * ) コンストラクタ。第 1 引数はチャネル名。第 2 引数は親オブジェクトのアドレス。第 3 引 数はオブジェクト名。 bool QCopChannel::isRegistered ( const QCString & ) 引数で指定されたチャネル名のチャネルが存在するかどうかを調べる。存在しているなら ば TRUE を、存在しないならば FALSE を返す。static 関数である。 bool QCopChannel::send ( const QCString & , const QCString & , const QByteArray & ) 第1引数で指定されたチャネルに対し、メッセージを送信する。第2引数はメッセージ名、 第3引数はデータストリームである。static 関数である。 void QCopChannel::received ( const QCString & , const QByteArray & ) メッセージを受信する。第 1 引数はメッセージ名、第 2 引数はデータストリームである。 シグナル関数である。 メッセージの送受信の流れを示す。ここではチャネル名は”MyChannel”、メッセージ名 は”MyMessage”、送信データは”Data1”, “Data2”の 2 つの文字列とする。 [サンプルプログラム 9 ] [送信側] /* 送信データ作成 */ QString send_str1 = “Data1”; QString send_str2 = “Data2”; 37 /* チャネル名設定 */ QCString channel_name = “MyChannel”; /* メッセージ名設定 */ QCString message_name = “MyMessage”; /* バイト配列 */ QByteArray array; /* バイト配列に対し、書き込み専用のデータストリームオブジェクトを生成 */ QDataStream stream(array, IO_WriteOnly); /* データストリームにデータを送る */ stream << QString(send_str1) << QString(send_str2); /* QCopChannel オブジェクトを生成 */ QCopChannel channel(channel_name, this, ”channel”); /* メッセージ送信 */ channel.send(MyChannel, MyMessage, array); [受信側] /* チャネル名設定 */ QCString channel_name = “MyChannel”; /* QCopChannel オブジェクト生成 */ QCopChannel channel(channel_name, this, “channel”); /* シグナル・スロットの登録 */ connect(channel, SIGNAL(received(const QCString &, const QByteArray & )), this, SLOT(recv_slot(const QCString &, const QByteArray &))); /* メッセージ受信用カスタムスロット関数 */ void CustomWidget4::recv_slot(const QCString &name, const QByteArray &array) { /* 受信データ格納用変数 */ QString recv_data1; QString recv_data2; /* バイト配列に対し、読み込み専用のデータストリームオブジェクトを生 成 */ 38 QDataStream stream(array, IO_ReadOnly); /* データストリームからデータ取得 */ stream >> recv_data1 >> recv_data2; } 送信側は、QDataStream クラスオブジェクトを介して、QByteArray 変数にデータを入力 し、受信側は、QDataStream クラスオブジェクトを介して、QByteArray 変数からデータ を取得する。 39 【8】イベント Qt アプリケーションでは、「ウィジェットが表示される」、「ウィジェットに描画をする」、 「キーボードからの入力がある」、 「マウスで操作される」といったイベントを、QEvent ク ラスを基礎クラスとするサブクラス群のオブジェクトにより参照することができる。 [クラス図 (一部抜粋)] QEvent QHideEvent QMouseEvent QMoveEvent QPaintEvent QShowEvent イベントオブジェクトは明示的に生成する必要はない。QWidget クラスには、イベントの 受信関数があるので、その関数をオーバーロードすることにより、イベントに対する処理 を実装することができる。 [イベントの受信関数(一部抜粋)] virtual void QWidget::mousePressEvent ( QMouseEvent * ) マウスイベントに対する受信関数 virtual void QWidget::paintEvent ( QPaintEvent * ) 描画更新が必要な際に発行されるイベントの受信関数 40 virtual void QWidget::moveEvent ( QMoveEvent * ) ウィジェットのジオメトリが変化した際に発行されるイベントの受信関数 virtual void QWidget::showEvent ( QShowEvent * ) ウィジェットの表示イベントの受信関数 41 【9】機能制限によるライブラリサイズの削減 Qt/Embedded ならびに Qtopia は組み込みシステムで使用するので、ライブラリサイズを 小さくすることが非常に重要である。 Qt/Embedded には、あらかじめ機能制限によりライブラリサイズを小さくする方法が用意 されている。Qt/Embedded ライブラリをビルド生成する際に、不要な機能に対するマクロ を定義する。例えば #define QT_NO_STYLE_WINDOWS と定義すれば、QWindowsStyle クラスが使用できなくなる(クラス定義そのものがなくな る)。したがって、Qt/Embedded を使用する際は、不要な機能、クラスを抽出し、サイズの 削減を図るべきである。 42 【10】その他のクラス 本章では、今までに挙げられなかった Qt のクラスの中で、本開発において使用したものに ついて説明する。 [A] QString クラス / QCString クラス QString クラス、QCString クラスはともに文字列を扱うクラスである。QString クラスは ユーザに見える文字列、QCString はユーザに見えない文字列に使用する。Qt では、内部 で Unicode を使用している。Unicode は、 1993 年 に国際標準化機構 (International Standards Organization, ISO)で標準化された文字コード体系で、世界中の主要な言語のほ とんどの文字を収録している。Qt において日本語を表示させるためには、日本語文字列を UTF-8(8-bit Universal multi-octet coded character set Transformation Format)コー ドで記述し、QString クラスの fromUtf8 メソッドで Unicode に変換しなければならな い。また、QString クラスの utf8 メソッドで Unicode から Utf-8 コードに変換するこ とができる。 QString::QString ( const char * str ) char 型配列から、QString オブジェクトを生成する。 uint QString::length ( void ) 文字列長(文字数)を返す。 QString QString::left ( uint ) 文字列の左から引数分の部分文字列を返す。 QString QString::right ( uint ) 文字列の右から引数分の部分文字列を返す。 QString QString::mid ( uint , uint ) 文字列の第 1 引数番目から、第 2 引数の長さの文字列を返す。 QString& QString::append ( const QString & ) 文字列に引数文字列を連接した文字列を返す。 int QString::find ( const QRegExp & , int ) 43 第 2 引数から始めて、第 1 引数で指定した正規表現に最初に一致する場所を返す。 QString QString::stripWhiteSpace ( void ) 文字列の前後の空白(TAB, LF, CR, SPACE)を削除した文字列を返す。 QString & QString::replace ( const QRegExp &, const QString & ) 第 1 引数で指定した正規表現に一致する部分を、第 2 引数で指定した文字列に置換した文 字列を返す。 QString QString::fromUtf8 ( const char * ) UTF-8 コード文字列を Unicode に変換して返す。 QCString QString::utf8( void ) Unicode 文字列を、UTF-8 コードに変換して返す。 [B] QRegExp クラス 正規表現をあつかうクラス。 QRegExp::QRegExp ( const QString & ) 正規表現を作成する。 [C] QColor クラス 色を指定するクラス。指定方法は、RGB1とHSV2の 2 種類である。HLS3やCMY4などは使 用できない。 QColor::QColor ( int, int, int ) 1 RGBモデルは、光の 3 原色「赤(Red)」 、「緑(Green)」、「青(Blue)」の混合比により色を指定するモデル。それぞれ 0 ∼255 の値をもつ。 2 HSVモデルは、 「色相(Hue)」、「彩度(Saturation)」、「明度(Value)」により色を指定するモデル。色相は赤、黄、緑、 青、紫の順の色相環として表現され、0 から 360 の値をもつ。彩度は鮮やかさ、明度は明るさで、それぞれ 0∼100 の 値をもつ。 3HLSモデルは、 「色相(Hue)」、 「明度(Lightness)」、「彩度(Saturation)」で色を指定。HSVモデルとは、明度と彩度の 定義が異なる。 4 CMY方式は、色の 3 原色「シアン(Cyan)」 、 「マゼンタ(Magenta)」、 「イエロー(Yellow)」の混合比により色を指定する モデル。 44 RGB モデルで色を指定する。 QColor::QColor ( int, int, int, Spec ) モデルを選択し、色を指定する。Spec の値は, QColor::Rgb もしくは QColor::Hsv である。 [D] QBrush クラス 描画の塗りつぶしスタイルを設定するクラス。QPainter クラスの setBrush メソッドの引 数として使用する。 QBrush::QBrush ( const QColor &, BrushStyle ) コンストラクタ。第 1 引数は塗りつぶし色、第 2 引数はブラシスタイルである。ブラシス タイルには、以下のものがある。 BrushStyle(一部抜粋) Qt::SolidPattern 100%塗りつぶし Qt::Dense1Pattern 94%塗りつぶし Qt::Dense2Pattern 88%塗りつぶし Qt::Dense3Pattern 63%塗りつぶし Qt::Dense4Pattern 50%塗りつぶし Qt::Dense5Pattern 37%塗りつぶし Qt::Dense6Pattern 12%塗りつぶし Qt::Dense7Pattern 6%塗りつぶし Qt::HorPattern 水平線塗りつぶし Qt::VerPattern 垂直線塗りつぶし [E] QFont クラス フォントを指定するクラス。QWidget クラスや QPainter クラスの setFont メソッドの引 数として使用する。 QFont::QFont ( const QString & , int , int , bool ) フォントを指定する。第 1 引数はファミリ、第 2 引数はポイントサイズ、第 3 引数はウェ イト、第 4 引数はイタリック指定である。あらかじめ定義されているウェイトは以下の通 45 り。 QFont::Light (25) QFont::Normal (50) QFont::DemiBold (63) QFont::Bold (75) QFont::black (87) [F] QPainter クラス ウィジェットに図形、文字列、画像などを描画させるには、QPainter クラスを用いる。ウ ィジェットに描画させるためには、QWidget クラスの paintEvent をオーバーロードする。 begin メソッドで描画を開始する。その際に描画対象となるウィジェットのアドレスを渡す。 終了時には end メソッドをコールしなければならない。 [サンプルコード 9 ] class CustomWidget5 : public QWidget { public: void paintEvent(QPaintEvent *); } void CustomWidget5::paintEvent(QPaintEvent *e) { QPainter paint; paint.begin(this); /* 描画開始 */ … paint.end(); /* 描画終了 */ } QPainter::QPainter () コンストラクタ。QPainter オブジェクトを生成する。 bool QPainter::begin ( const QPaintDevice * ) 引数で指定した描画対象オブジェクトに対して描画を開始する。描画開始可能な場合は 46 TRUE を、描画開始不能な場合は FALSE を返す。 bool QPainter::end ( void ) 描画を終了する。終了に成功した場合は TRUE を、失敗した場合は FALSE を返す。 void QPainter::setFont ( const QFont & ) フォントをセットする。 void QPainter::setPen ( PenStyle ) 線の種類を指定する。PenStyle の値は以下の通り。 Qt::NoPen 描画しない Qt::SolidLine 実線を描画する Qt::DashLine 数ピクセルおきに短い線を描画する Qt::DotLine 数ピクセルおきに点を描画する。 Qt::DashDotLine 点と短い線を交互に描画する。 Qt::DashDotDotLine 点 2 つと短い線を交互に描画する void QPainter::setPen ( const QColor & ) 線の色をセットする。 void QPainter::setBrush ( const QBrush & ) ブラシをセットする。 void QPainter::drawLine ( int , int , int , int ) 第 1 引数と第 2 引数とで指定された座標から、第 3 引数と第 4 引数とで指定された座標へ の線を描画する。 void QPainter::drawRect ( int , int , int , int ) 第 1 引数と第 2 引数とで指定された座標から、第 3 引数を幅、第 4 引数を高さとする矩形 を描画する。 void QPainter::drawPixmap ( int , int , const QPixmap & ) 第 1 引数と第 2 引数とで指定された座標から、第 3 引数で指定された画像を描画する。 void QPainter::drawTiledPixmap ( int , int , int , int , const QPixmap & ) 第 1 引数と第 2 引数とで指定された座標から、第 3 引数を幅、第 4 引数を高さとする領域 47 に対して、第 5 引数で指定した画像を繰り返し描画する。 void QPainter::drawText ( int x, int y, const QString & ) 第 1 引数と第 2 引数とで指定された座標から、第 3 引数で指定した文字列を描画する。 [G] QPixmap クラス Qt においては、画像ファイルは QPixmap オブジェクトとして扱う。 QPixmap ( const QString & ) コンストラクタ。QPixmap オブジェクトを生成する。引数は画像ファイルの絶対パス。 [H] QMovie クラス アニメーション GIF などの動画ファイルは、QPixmap オブジェクトではなく QMovie オブ ジェクトとして扱う。 QMovie::QMovie ( const QString & fileName ) コンストラクタ。QMovie オブジェクトを生成する。引数は画像ファイルの絶対パス。 [I] QStringList クラス QString クラスに対するリストコンテナクラスである。 QStringList::QStringList () コンストラクタ。空のリストを生成する。 void QStringList::append( QString ) 文字列をリストに挿入する。 void QStringList::clear( void ) リスト内のすべての文字列を削除し、空のリストにする。 48 QStringList::Iterator QStringList::begin( void ) 文字列リストの先頭の文字列を指すイテレータを返す。 QStringList::Iterator QStringList::end( void ) 文字列リストの末尾の文字列を指すイテレータを返す。 QStringList QStringList::grep ( const QString & ) 引数で指定した部分文字列を含むすべての文字列からなるリストを返す。 [J] QMap MAP コンテナクラスである。 QMap::QMap() コンストラクタ。空のマップを生成する。 生成するときはキーの型(以下、Key)とデータの型(以下、T)を指定する必要がある。 Iterator QMap::insert ( const Key & , const T & ) 第 1 引数で指定したキーで、第 2 引数で指定したデータをマップに挿入し、そのアイテム を指すイテレータを返す。 Iterator QMap::find ( const Key & ) 引数で指定されたキーでマップ内を検索する。データがある場合はそのアイテムを指すイ テレータを、データがない場合は末尾のアイテムを指すイテレータを返す。 void QMap::remove ( const Key & ) 引数で指定されたキーに対応するアイテムを削除する。 Iterator QMap::replace ( const Key & , const T & ) 第 1 引数で指定されたキーに対応するデータを、第 2 引数で指定したデータに置換し、そ のアイテムを指すイテレータを返す。 void QMap::clear ( void ) マップ内のすべてのアイテムを削除する。 49 Iterator QMap::begin ( void ) マップの先頭をアイテムを指すイテレータを返す。 Iterator QMap::end ( void ) マップの末尾のアイテムを指すイテレータを返す。 uint QMap::count ( void ) マップ内のアイテム数を返す。 Key Iterator::key( void ) イテレータが指すアイテムのキーを返す。 T Iterator::data( void ) イテレータが指すアイテムのデータを返す。 [K] QTimer クラス タイマーを提供する。 QTimer::QTimer ( QObject * , const char * ) コンストラクタ。第 1 引数が親オブジェクト、第 2 引数がオブジェクト名の QTimer オブ ジェクトを生成する。 int QTimer::start ( int , bool ) 第 1 引数で指定した時間(ミリ秒)でタイムアウトするタイマーを開始する。第 2 引数が TRUE の場合はタイマーは 1 度だけ動作し、FALSE の場合はタイマーは停止するまで動作 する。 void QTimer::stop ( void ) タイマーを停止する。 void QTimer::timeout ( void ) タイマーがタイムアウトするとコールされるシグナル関数。 bool QTimer::isActive ( void ) 50 タイマーが動作中であれば TRUE、動作していなければ FALSE を返す。 void QTimer::singleShot ( int msec, QObject * , const char * ) 第 1 引数で指定した時間(ミリ秒)が経過すると、第 2 引数で指定したオブジェクトの、第 3 引数で指定したスロット関数を実行する。 51
© Copyright 2024 Paperzz