実現したいこと
QMLを用いてGUIの作成を行っています
今回行いたいこととしては動画再生ソフトを作成したいと思っています。
ListViewを用いて動画のタイトル一覧を表示し、タイトルがクリックされたときに画面を遷移して遷移先のMediaPlayerのsourceにファイルパスを入れて表示、という流れを作りたいと思っています。
発生している問題・エラーメッセージ
現在、ListViewにファイルパスを表示して遷移先のMediaPlayerに表示という流れはできているのですが
この状態から、表示されているテキストを変えたいと思っています。
今考えていたイメージとしては、構造体、またはクラスとして下記のようなデータのまとまりを持っておいて
その中から表示するテキストや送るファイルパスなどを指定できるようにしたいと思っていました。
cpp
1struct VideoInfo{ 2 QString title; // ListViewに表示されるテキスト 3 QString path; // ListViewでテキストがclickされたときに渡されるパス 4} 5
現在はこのように書いています。
※VideoPage にはMediaPlayerとVideoOutput、及び操作するためのボタンが置いてあるだけなので省略
main.cpp
cpp
1// 追加分のみ記載 2 3QString path = "/home/root/"; 4QStringList dataList; 5QStringList nameFilters; 6nameFilters.append("*.mp4"); 7 8// QMLにデータを送るためのもの 9QQmlContext *ctxt = engine.rootContext(); 10 11// ファイル情報取得 12QDirIterator it(path, nameFilters, QDir::Files, QDirIterator::Subdirectories); 13while (it.hasNext()) { 14 QString file = it.next(); 15 // リストに追加 16 dataList.append("file://" + file); 17} 18// QMLにデータを送る 19ctxt->setContextProperty("myModel", QVariant::fromValue(dataList)); 20
main.qml
qml
1 2Window{ 3 visible: true 4 width: 640 5 height: 480 6 7 StackView { 8 id: stack 9 anchors.fill: parent 10 11 Page { 12 anchors.fill: parent 13 14 ListView { 15 id: list 16 height: parent.height; width: parent.width 17 model: myModel // c++からデータの取得 18 19 delegate: Rectangle { 20 height: 25; width: parent.width - 20 21 x: 10 22 23 Text { 24 id: text 25 x: 10; y: parent.height / 2 - this.height / 2 26 text: modelData // c++から取得したデータの反映 27 } 28 MouseArea { 29 anchors.fill: parent 30 onClicked: { 31 sv_video.mdp_video.source = text.text // ここをtext.text から構造体の中の値にしたい 32 sv_video.visible = true 33 } 34 } 35 36 border.color: "black" 37 border.pixelAligned: { 5 } 38 } 39 ScrollBar.vertical: ScrollBar{} 40 } 41 42 VideoPage { 43 id: sv_video 44 visible: false 45 } 46 } 47} 48
該当のソースコード
下記のように動かしたいと考えています。
qml
1MouseArea { 2 anchors.fill: parent 3 onClicked: { 4 sv_video.mdp_video.source = text.text // ここをtext.text から構造体の中の値にしたい 5 //sv_video.mdp_video.source = 送られてきた構造体.path // イメージ 6 7 sv_video.visible = true 8 } 9}
試したこと
何件か調べてみたのですがmain.cppから値を入れるというものが少なく、参考になりそうなものがありませんでした。
なお、下記のように調べていました。
- qml setcontextproperty struct
- qml listview struct
- qml listview class
補足情報(FW/ツールのバージョンなど)
Ubuntu 16.04 LTS64
Qt 5.10.1 (GCC 5.3.1 20160406 (Red Hat 5.3.1-6), 64bit)
Qt Creator 4.5.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/11 08:00
2019/09/11 09:09 編集
2019/09/11 23:39