久しぶりに Qt やってみようかと
これ、
Draft: VR Mode (!8671) · Merge requests · Plasma / KWin · GitLab
Monado (Rokid Max, HP G2) and WiVRn (Quest 3)
とあり、うちでも動かせるようになりそう。 自前で plasama kwin をビルドして動かすには、クンフーが足りないのでマージされてから試すことになるのだけど。
予行演習として QtQuick3D + OpenXR の実験からやってみようと思ったわけであります。
Qml を動かすには ?
arch linux は、 /usr/bin/qml があるので qml hoge.qml とすれば簡単に試せるのかと思いきや import QtQuick に失敗するぽい。 /usr/bin/qml を単体の interpleter として運用することが想定されているのかどうかが わからない。
qml command は諦めて host アプリをビルドすることにした。
https://pixi.prefix.dev/latest/
のビルド済み Qt6 を使えば、Windows でも動きそうな気がしたのでやってみた。
https://github.com/ousttrue/qt_sample
いちおうできたのだが注意するべき点があった。
qt6_add_qml_module が謎のエラーを出す
CMake Error at /usr/lib/cmake/Qt6Qml/Qt6QmlMacros.cmake:5499:EVAL:1 (cmake_language):
cmake_language DEFER CALL may not be scheduled in directory:function(_qt_internal_collect_qml_module_dependencies target)
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.19.0")
string(JOIN " " collect_qml_module_dependencies_code
"cmake_language(DEFER DIRECTORY \"${CMAKE_BINARY_DIR}\""
"CALL _qt_internal_collect_qml_module_dependencies_deferred \"${target}\")"
)
cmake_language(EVAL CODE "${collect_qml_module_dependencies_code}")
else()
_qt_internal_collect_qml_module_dependencies_deferred("${target}")
endif()
endfunction()cmake-3.18 に下げることで回避できたが、qt6.10 は cmake-3.22 を要求するので、 -DQT_FORCE_MIN_CMAKE_VERSION_FOR_USING_QT=3.18 が必要。
ねばってみたところ、subdirs が原因とわかった。 すべて root に移すとうまくいった。
https://cmake.org/cmake/help/latest/command/cmake_language.html#defer
cmake_language(DEFER DIRECTORY) と add_subdirectory が not be scheduled をおこしているぽい。
なんと、subdirs を add_subdirectory に変えたらなおった !
https://cmake.org/cmake/help/latest/command/subdirs.html
Deprecated since version 3.0: Use the add_subdirectory() command instead.
Deprecated ... 知らねー。
QRangeModel のビルドが通らない
vc2022 では無理っぽい? 諦めた。 Windows でも build できるようにするならば、 c++17 でできる範囲が無難かも。 prebuilt の libc++ を配布しているものは見当らなかった。