大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Qtプログラミング – ダイアログ

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2019/08/10
最終更新日:2019/08/10
カテゴリー:技術情報
タグ:

津路です。

前回は、Qtで特徴的な、シグナルとスロットについて取り上げました。
これからは、Jasmin Blanchette、Mark Summerfield著 「Qt4プログラミング」 から抜粋します。
スロットは、通常のC++メンバー関数と同様で、virtual, overload, public, protected, private いずれにも指定できて、普通関数みたいに呼び出すこともできます。
シグナルが起きるとスロットが呼び出されます。
connect(sender, SIGNAL(signal), receiver, SLOT(slot function));
sender, receiverはQObjectへのポインタで、signal, slot functionは、関数宣言から引数を省略したものです。

さて、書籍の次の項目で、「ダイアログのRADデザイン」という項目があります。
要するに、プログラミングのみにてGUIを作成するのでなく、Qt Designerを使って、コンポーネントを配置してダイアログを作成することです。
Qtで便利なのは、GUIをdesignerで作成したあと、qmakeというコマンドで、.uiリソースファイルから、makeルールを作成します。
これにより、ui_???.h が出力されます。
ここでは、Ui::??? ???はクラス名の宣言が行われます。
また、各QWidgetの変数と、setupUiという便利な関数が宣言されます。
重要なのは、生成されたクラスは、Qtクラスを継承していない?ことです。
インスタンスを生成して使うには、main.cppにて、以下のようにコーディングします。

さて、これだけでは、イベントに何も反応しない、うすっぺらなUIプログラムです。
シグナルとスロットを使うには、QDialogと、designerでできたuiプログラムのクラスを、多重継承したクラスを新たに宣言することです。
以下のような形ですね。

Ui::TestDialogが、uicで作成されたクラスです。
TestDialogクラスは、親QWidgetポインタを必要とします。
slotには、シグナルに反応する関数を宣言します。

    上に戻る