日記

ただの日記

QtのGUIがなんか重いという問題

Qtを始めてデバッグなんかをしていたら、どうも昔に比べて思いなーと思っていた。それはメニューバーの反応が遅かったり、Windowサイズを調整すると再描画がされなかったり、というような現象でJavaGUIアプリケーションを触っているようなイメージだった。

しかし、サンプルのアプリケーションではさくさく動くし見た目も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();
}

するとこれが、 f:id:kou_lowenergy:20170219172242p:plain

こうなった。見た目ではあまり変化がないように思うかもしれないが、レスポンスが向上しウィンドウサイズの変更に機敏に反応してくれるようになった。 f:id:kou_lowenergy:20170219172230p:plain

なぜだろうと、調べてみるとQApplicationはQGuiApplicationを継承していて、Wigetsの操作を提供していると書いていた(ここ)

使用しているMenuBarやTreeViewがWidgetsということだろうか?それでも、遅いながらも動いているのはおかしいということにならないだろうか。main関数内のたった1行だけを変更するだけで、このように変化する理由がわからない。

参考