k.nishijo
2018年3月19日 14時49分
お世話になります。
掲題の件について質問いたします。
ネットでいろいろ調べた結果、
Qt Quick(QML)で作成した画面を切り替えるには、Stateを使用するということまでは分かったのですが、
それを画面以外の処理(C++側)からなにかしらの制御を検出して(例えば、Armadilloのユーザーボタン押下?)それをトリガとして切り替える方法(state:を変化させる方法)がわかりません。
そのようなことは可能なのでしょうか?
参考になるURL等がありましたらご教示ください。
コメント
k.nishijo
本件、QMLの画面遷移をQML内ではなくC++で外から制御することは可能でしょうか?
> >(state:を変化させる方法)がわかりません。
> > そのようなことは可能なのでしょうか?
>
> こちら参考になるでしょうか。自分で代入すれば遷移します。
>
> Qt Quick 入門 第5回: 状態遷移
> http://blog.qt.io/jp/2010/10/27/qml-states-2/
>
> 上の例だと、widget内のMouseAreaに対して発生したクリックを
> onClickハンドラで検知して、ハンドラ内の処理をstateの代入としています。
>
> MouseAreaで利用できる他のハンドラはリファレンスマニュアルを参照してください。
> http://doc.qt.io/qt-5/qml-qtquick-mousearea.html
>
> 他にもキーボードであればKeysが使えます。
> こちらもリファレンスマニュアルにサンプルがあります。
> http://doc.qt.io/qt-5/qml-qtquick-keys.html
>
> あるいは、Armadilloのユーザーボタンは標準イメージであれば
> gpio-keyデバイスドライバによってキーボードのキーと同じように
> 扱うことができるので、同様に、Keysのハンドラによって
> イベントを獲得できると思います。
>
> Armadillo-840開発セット 拡張ボード01のユーザースイッチが発生させる
> キーコードは下記参照してください。
> 参考: Armadillo-840 製品マニュアル 6.10. ユーザースイッチ 
> https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…
>
at_ohsawa
>
> 本件、QMLの画面遷移をQML内ではなくC++で外から制御することは可能でしょうか?
そのままなチュートリアルがあります。QQmlPropertyで直接書き換えるか、
QMLにシグナルハンドラを書いておいて、 QObject::connectで繋いで、
シグナルを伝える等できると思います。
http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html
QQmlPropertyを使わなくてもqml engine自体のオブジェクト内には
QMLの構造がそのまま入っているので、探して書き換える事もできるみたいです。
https://forum.qt.io/topic/67380/c-find-child-qml-item-included-from-oth…
k.nishijo
確認できました。
ありがとうございました。
> >
> > 本件、QMLの画面遷移をQML内ではなくC++で外から制御することは可能でしょうか?
>
> そのままなチュートリアルがあります。QQmlPropertyで直接書き換えるか、
> QMLにシグナルハンドラを書いておいて、 QObject::connectで繋いで、
> シグナルを伝える等できると思います。
> http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html
>
> QQmlPropertyを使わなくてもqml engine自体のオブジェクト内には
> QMLの構造がそのまま入っているので、探して書き換える事もできるみたいです。
> https://forum.qt.io/topic/67380/c-find-child-qml-item-included-from-oth…
at_ohsawa
2018年3月19日 15時13分
>(state:を変化させる方法)がわかりません。
> そのようなことは可能なのでしょうか?
こちら参考になるでしょうか。自分で代入すれば遷移します。
Qt Quick 入門 第5回: 状態遷移
http://blog.qt.io/jp/2010/10/27/qml-states-2/
上の例だと、widget内のMouseAreaに対して発生したクリックを
onClickハンドラで検知して、ハンドラ内の処理をstateの代入としています。
MouseAreaで利用できる他のハンドラはリファレンスマニュアルを参照してください。
http://doc.qt.io/qt-5/qml-qtquick-mousearea.html
他にもキーボードであればKeysが使えます。
こちらもリファレンスマニュアルにサンプルがあります。
http://doc.qt.io/qt-5/qml-qtquick-keys.html
あるいは、Armadilloのユーザーボタンは標準イメージであれば
gpio-keyデバイスドライバによってキーボードのキーと同じように
扱うことができるので、同様に、Keysのハンドラによって
イベントを獲得できると思います。
Armadillo-840開発セット 拡張ボード01のユーザースイッチが発生させる
キーコードは下記参照してください。
参考: Armadillo-840 製品マニュアル 6.10. ユーザースイッチ 
https://manual.atmark-techno.com/armadillo-840/armadillo-840_product_ma…