,可以通过以下步骤实现:
完整的代码示例如下:
CustomObject.h:
#ifndef CUSTOMOBJECT_H
#define CUSTOMOBJECT_H
#include <QObject>
class CustomObject : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
public:
explicit CustomObject(QObject *parent = nullptr);
QString name() const;
void setName(const QString &name);
signals:
void nameChanged();
private:
QString m_name;
};
#endif // CUSTOMOBJECT_H
CustomObject.cpp:
#include "CustomObject.h"
CustomObject::CustomObject(QObject *parent) : QObject(parent)
{
}
QString CustomObject::name() const
{
return m_name;
}
void CustomObject::setName(const QString &name)
{
if (m_name != name) {
m_name = name;
emit nameChanged();
}
}
CustomListModel.h:
#ifndef CUSTOMLISTMODEL_H
#define CUSTOMLISTMODEL_H
#include <QAbstractListModel>
#include <QList>
#include "CustomObject.h"
class CustomListModel : public QAbstractListModel
{
Q_OBJECT
public:
enum CustomRoles {
NameRole = Qt::UserRole + 1
};
explicit CustomListModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QHash<int, QByteArray> roleNames() const override;
private:
QList<CustomObject*> m_objects;
};
#endif // CUSTOMLISTMODEL_H
CustomListModel.cpp:
#include "CustomListModel.h"
CustomListModel::CustomListModel(QObject *parent) : QAbstractListModel(parent)
{
// 添加一些CustomObject对象到m_objects列表中
CustomObject* obj1 = new CustomObject();
obj1->setName("Object 1");
m_objects.append(obj1);
CustomObject* obj2 = new CustomObject();
obj2->setName("Object 2");
m_objects.append(obj2);
}
int CustomListModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return m_objects.count();
}
QVariant CustomListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= m_objects.count())
return QVariant();
if (role == NameRole)
return m_objects[index.row()]->name();
return QVariant();
}
QHash<int, QByteArray> CustomListModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[NameRole] = "name";
return roles;
}
main.qml:
import QtQuick 2.0
import QtQuick.Controls 2.0
import com.example 1.0
ApplicationWindow {
visible: true
width: 400
height: 400
ListView {
anchors.fill: parent
model: CustomListModel {}
delegate: Item {
width: parent.width
height: 40
Text {
anchors.centerIn: parent
text: name
}
}
}
}
在上述示例中,CustomObject类表示自定义的QObject子类,具有一个name属性。CustomListModel类表示自定义的ListModel类,包含一个存储CustomObject对象的列表。在QML文件中,使用ListView来展示CustomListModel中的数据,每个列表项显示CustomObject的name属性。
请注意,示例中的代码仅用于演示目的,实际使用时可能需要根据具体需求进行修改和优化。
腾讯云相关产品推荐:
领取专属 10元无门槛券
手把手带您无忧上云