根据下面的代码,我需要创建一个模型,该模型将具有 N 个"System",每个"System"将具有 N 个"SytemDatabase",每个"SytemDatabase"将具有 N 个"CoresData"。这个 N 号将在应用程序启动期间获知。
struct CoresData {
int m_iCoreSpeed;
bool m_bCoreAvailable;
};
class SytemDatabase {
public:
SytemDatabase();
bool m_bDatabaseVisible;
int m_iDatabaseNumber;
QList<CoresData> m_listCoresData;
};
class Sytem {
public:
Sytem();
bool m_bSystemAvailable;
int m_iSystemNumber;
QList<SytemDatabase> m_listSytemDatabase;
};
class SytemTree : public QAbstractItemModel {
Q_OBJECT
public:
explicit SytemTree( QObject *parent = nullptr);
~SytemTree();
QVariant data(const QModelIndex &index, int role) const override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
QModelIndex parent(const QModelIndex &index) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
private:
void addSytemDatabase(Sytem &data);
QList<Sytem> m_listSystem;
};
目前我已经使用 ListModel 设计了这个模型并且它工作正常。现在由于某种原因,我需要将此模型移动到 cpp 端并将该模型传递给 qml。下面是QML代码供参考
SytemTree.append({ "iSystemNumber": systemNumber, "bSystemAvailable": false, "SytemDatabase":[{ "iDatabaseNumber": databaseNumber, "bDatabaseVisible": false,"CoresData": []}]})
for( var lp = 0; lp < totalcoreData; ++lp) {
SytemTree.get(systemNumber).SytemDatabase.get(iDatabaseNumber).CoresData.append({ "bCoreAvailable": true, "bCoreAvailable": true, "iCoreNumber": coreNumber})
}
考虑模型是在 cpp 端开发的,参考上面的 cpp 类 Sytem、SytemDatabase 和 CoresData ,并且在 qml 代码中传递和使用相同的模型,如下所示
Repeater {
id: repeaterRootSystem
model: SytemTree
delegate: customRectangle {---
visible: systemAvailable
value: systemNumber
----
Repeater {
id: repeaterDatabase
model: SytemTree.get(index).SytemDatabase
delegate: customRectangle {---
visible: databaseVisible
value: databaseNumber
---
Repeater {
id: repeaterCoresData
model: SytemTree.get(index).SytemDatabase.get(index).CoresData
delegate: customRectangle {--
visible: coreAvailable
value: coreNumber
speed: coreSpeed
----
}
}
}
}
}
}
我已经了解了 QAbstractListModel、QAbstractItemModel 和 QAbstractTableModel 的概念。但是我正在寻找一个像一个列表模型这样的模型,每个列表元素都将包含一个树状结构,如上面在类中提到的那样。要求任何人建议如何创建一个具有树状结构的模型。以及哪个 QAbstractxxxxxx 模型将是正确的来实现这个概念。在 QML 方面,我想通过索引直到 coresData 访问数据,就像上面的 QML 代码一样。
提前致谢。