我有一個包含這么多欄位的 cpp 結構
struct CloudMusicSongList{ ... };
我想在 qml 中使用它以便向它的實體輸入一些資訊,但我不想創建一個 qobject 派生類,并創建很多 qproperty ...我在谷歌中搜索并從這個
不知道是不是xy的問題。
有人可以幫忙嗎?謝謝
我想創建一個 bindingProxy 模板類,它可以在 qml 中雙向系結我認為它應該等效于 wpf 中的dynamicObject
uj5u.com熱心網友回復:
基于CloudMusicSongList我假設你擁有的是一個串列/陣列。有很多方法可以將其暴露給 QML。
- QQmlListProperty - https://doc.qt.io/qt-6/qqmllistproperty.html
- QAbstractListModel - https://doc-snapshots.qt.io/qt6-dev/qabstractlistmodel.html
- QVariant、QVariantList 和/或 QVariantMap - https://doc-snapshots.qt.io/qt6-dev/qvariant.html
- QObject / Q_OBJECT - 創建一個新的 QML 組件并注冊它
- Q_GADGET - 注冊您的 C 結構(適用于訪問信號中的類,但是,QML/JS 無法將其復制到 Javascript 物件中,僅適用于信號持續時間)
QQmlListProperty 是 QObject 的串列。它需要注冊底層 QObject,但是,允許您創建/管理和遍歷結果串列。該串列通常由另一個 QObject 擁有。例如,我們可以有一個 QmlFile 物件,然后實作一個可以回傳 QmlFile 串列的 QmlFileSystem 物件。
QAbstactListModel 可以用在需要模型的地方,例如ListView。
QVariant、QVariantList 和 QVariantMap 是在 QML 中創建 Javascript 物件的最簡單方法。優點是你不需要注冊任何東西,但缺點是你沒有智能感知。
QVariant getBooks() {
QVariantList books;
QVariantMap book1;
book1["title"] = QString("Lord of the Rings");
QVariantMap book2;
book2["title"] = QString("The Hobbit");
books.append(book2);
return books;
// results in QML/JS:
// [ { "title": "Lord of the Rings" },
// { "title" : "The Hobbit" } ]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/532552.html
標籤:qtqmlqt5
