凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

QtQuick 2 でフルスクリーン表示 (Mac OS X)

はじめに

Mac で QtQuick アプリを作成していたのですが、QtQuick 1 では QWidget::setFullScreen() を呼べば簡単にフルスクリーン化出来たのに対し、QtQuick 2 に切り替えて同じ事をしてもフルスクリーン化出来ず困りました。色々と試行錯誤して、一部駄目なところもありますが何とか出来たので、内容をメモします。

問題

同じように困っている人もチラホラ見かけるのですが 0 replies ...。ここにも書いてあるように、showMaximized() や、showMinimized() はうまく動作するのですが showFullScreen() だけ駄目なようです。

上記エントリにも書いてあるように QtQuick 2 からは QML を表示するビューが QWidget 派生クラスから QWindow 派生クラス(QQuickView)になったことに関係しているのかな?

QtQuick 1

こんな感じで出来てました*1

QmlApplicationViewer viewer;
viewer.setMainQmlFile(QLatin1String("qml/Hoge/main.qml"));
viewer.showFullScreen();

QtQuick 2

試行錯誤した結果、以下のようになりました*2

QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/Piyo/main.qml"));
viewer.setFlags(Qt::WindowFullscreenButtonHint);
viewer.showFullScreen();

showFullScreen() するまえに Qt::WindowFullscreenButtonHint を setFlags で伝えておきます。すると実行後、フルスクリーンで表示されます!ただ、フルスクリーン ON/OFF を切り替えるアイコンは表示されず、一度フルスクリーンを解除してしまうと再度フルスクリーン化は出来ません。

おわりに

どなたか詳しい方、教えていただけると助かります (-人-)

*1:QmlApplicationViewer は Qt Creator で Qt Quick 1 プロジェクトを生成すると生成され、プラットフォーム間の違いを吸収してくれる処理が書いてある QDeclarativeView 派生クラス(元を辿ると QWidget 派生クラス)です

*2:QtQuick2ApplicationViewer は Qt Creator で Qt Quick 2 プロジェクトを生成すると生成され、プラットフォーム間の違いを吸収してくれる処理が書いてある QQuickView 派生クラス(元を辿ると QWindow 派生クラス)です