如何在QML中展示命名的数组
时间: 2024-02-09 18:08:41 浏览: 65
在 QML 中展示命名的数组需要使用 Qt 的 Model-View 架构。你可以创建一个自定义 QAbstractListModel 的子类,然后在 QML 中使用该模型来展示数组。
以下是一个示例代码:
C++ 代码:
```
#include <QAbstractListModel>
class NamedArrayModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit NamedArrayModel(QObject *parent = nullptr);
// 定义模型相关的函数
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
// 定义一个设置数组的函数
void setNamedArray(const QMap<QString, QVariantList> &namedArray);
private:
QMap<QString, QVariantList> m_namedArray;
};
NamedArrayModel::NamedArrayModel(QObject *parent)
: QAbstractListModel(parent)
{
}
int NamedArrayModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid()) {
return 0;
}
return m_namedArray.count();
}
QVariant NamedArrayModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid()) {
return QVariant();
}
// 获取命名数组中的数据
QString name = m_namedArray.keys().at(index.row());
QVariantList array = m_namedArray.value(name);
if (role == Qt::DisplayRole) {
// 返回数据给 QML
return QStringLiteral("%1: %2").arg(name).arg(array);
}
return QVariant();
}
void NamedArrayModel::setNamedArray(const QMap<QString, QVariantList> &namedArray)
{
beginResetModel();
m_namedArray = namedArray;
endResetModel();
}
```
QML 代码:
```
import QtQuick 2.15
import QtQuick.Controls 2.15
ListView {
model: namedArrayModel
delegate: Text {
text: model.display
}
}
// 在某个地方设置 namedArrayModel 对象的数据
Component.onCompleted: {
var namedArray = {
"Array1": [1, 2, 3],
"Array2": ["a", "b", "c"]
}
namedArrayModel.setNamedArray(namedArray)
}
```
在这个示例中,我们创建了一个 NamedArrayModel 类来展示命名数组的数据,然后在 QML 中使用 ListView 组件来展示这个模型。通过设置 namedArrayModel 对象的数据,我们可以在 QML 中动态地展示命名数组。
阅读全文