QtのGUIがなんか重いという問題
Qtを始めてデバッグなんかをしていたら、どうも昔に比べて思いなーと思っていた。それはメニューバーの反応が遅かったり、Windowサイズを調整すると再描画がされなかったり、というような現象でJavaのGUIアプリケーションを触っているようなイメージだった。
しかし、サンプルのアプリケーションではさくさく動くし見た目もC#のWPFアプリケーションのようなモダンなデザインなのだ。
どうしてだろうとmain.cppやらmain.qmlやら設定ファイルやらを見比べていたら、一つの関数が違っていた。
// #include <QGuiApplication> #include <QApplication> #include <QQmlApplicationEngine> int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // ここを // QGuiApplication app(argc, argv); // こうする QApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QLatin1String("qrc:/main.qml"))); return app.exec(); }
するとこれが、
こうなった。見た目ではあまり変化がないように思うかもしれないが、レスポンスが向上しウィンドウサイズの変更に機敏に反応してくれるようになった。
なぜだろうと、調べてみるとQApplicationはQGuiApplicationを継承していて、Wigetsの操作を提供していると書いていた(ここ)。
使用しているMenuBarやTreeViewがWidgetsということだろうか?それでも、遅いながらも動いているのはおかしいということにならないだろうか。main関数内のたった1行だけを変更するだけで、このように変化する理由がわからない。