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

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

Raspberry Pi 3 で Qt

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

津路です。

今回は、昨年進め始めてとん挫していた、Qtプログラミングを再開してみることにしました。
昨年デバッグするときに、どうもおかしいなあと感じていたのですが、今回、debugging symbols for Qt Creatorがないことに気づき、インストールしました。
なんと323MBもあり、1時間半ほどかかりました。
やはり、インストールするときちんとブレークポイントで止まって、変数の中身が正確に見えます。

さて、ダイアログを作成するときにシグナルとスロットを定義します。その際、クラス定義でQ_OBJECT宣言が必要です。
Q_OBJECTはマクロです。
シグナルの宣言は、signals:というマクロの下で宣言します。
スロットの宣言は、slots: というマクロの下で宣言します。
ダイアログの子ウィジェット変数は、ヘッダ側でポインタとして宣言しておきます。
このとき、変数のクラスの前方参照を用いて宣言します。
前方参照とは、一般には前方宣言のことで、無駄なincludeを避けるために、クラス名のみを、作成するクラスのヘッダの先頭で宣言します。ダイアログを利用する場合は、QDialogをincludeします。
そして、cppソース側で、QtGUIをincludeし、クラス生成関数にて、parentパラメータを親クラスのコンストラクタに渡します。以下のように。
xxDialog::xxDialog(QWidget *parent)
: QDialog(parent)
{
}
さて、子ウィジェットを宣言していくわけですが、単に並べていくだけでは、きれいに配置することができません。
QLayoutというレイアウトマネージャーを使えば、領域ごとにウィジェットを配置して、整理できて便利です。
QHBoxLayout内では、横方向に、QVBoxLayout内では、縦方向に並べます。
QLayoutは、階層化できます。階層化するには、addLayout関数を使います。
さて、QWidgetやQHBoxLayoutなどを作成するには、new 演算子を使いますが、Qtでは deleteが不要です。
Qtは、親が破棄されるときに、子オブジェクトを破棄します。

ここで、話はスロットに行きます。
スロットでは、シグナルを通じて呼び出された際に、それに対するアクションを定義していきます。
例えば、あるボタンが押されたら、ファイルを読み込むとかですね。
通常は、connect関数で、シグナルとスロットを結びつけます。
詳しくは、次回に。。

    上に戻る