見出し画像

Qt5再入門: QApplication

「Qt5再入門」では、主に「Notes C API探訪」のコーナーで紹介したコードから、Qt5にまつわるトピックを取り上げて、Qt5をもう一度勉強し直していきます。

今回はQApplicationについて。
QApplicationは、QtのWidgetパーツを使ったC++ GUI系アプリの基盤となるクラスです。

スクリーンショット 2021-08-12 7.38.16

主な役割は、以下の通りです。

・イベントループの提供とイベント処理
・パスの提供
・国際化と翻訳
・コマンドライン引数へのアクセス
・その他

前回のサンプルコードでは、以下のように使っていました。

QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QApplication a(argc, argv);

main関数のできるだけ早い段階で生成するようにヘルプに書かれているので、Notes C API初期化後すぐのところに書いてあります。2行目でQApplicationのオブジェクトを作成していますが、内部的にはシングルトンだとどこかで読んだことがあり、知らずに2つ以上生成すると警告が出たと記憶しています。

1行目については、高精細なディスプレイのスケーリングに合わせるための設定です。この指定をせずにRetinaディスプレイや4K、8KディスプレイにGUIを表示すると、画面に比べて小さい文字、小さいボタンが表示されてしまいます。高精細なディスプレイはDPI(インチ辺りのドット数)が大きいため、普通にアプリのウィンドウを表示するとそのような現象に見舞われます。Qt::AA_EnableHighDpiScalingをアプリケーション属性として設定すると、高精細なディスプレイに表示しても、見やすいスケールで表示してくれます。

return a.exec();

このコードはQApplicationでイベントループをスタートさせます。イベントループが始まると、アプリケーションの終了イベントを検知するまでイベントを処理し続けます。終了イベントを検知すると、処理が戻ってきます。終了イベントはQApplication::exit(int retCode)で発行され、retCodeの内容がexec()の戻り値になります。

コンソールアプリケーションでは、このイベントループはあまり有難味はないかもしれませんが、非GUIアプリでも使用できます。GUIアプリケーションの場合は、キーボード以外にマウスやボタン、メニューなどがトリガーになるので、イベントループが大いに活躍します。

Qtの大きな特徴としてシングル、スロット機構がありますが、またいずれ紹介できると思います。

まとめ

C++でGUIと言えば、Visual C++とMFC、昔々のBorlandなどがありましたが、1ソース、マルチプラットフォームで開発するとなると、Qt以外ではなかなかお目にかかれません(「write once, run anywhere」として出てきたJavaに期待を寄せた時期もありましたが、私にとってはもう過去の話になりました)。マルチプラットフォームなNotes/Dominoと出会ったからこそ、Qtと巡り会ったといってもいいでしょう。

QApplicationはここでは紹介しきれないくらい多くの機能を備えています。折を見て少しずつ紹介できたらと思っています。

この記事が気に入ったらサポートをしてみませんか?