在QML中,可以通过使用ListView和ListModel来显示C++中的数据。
首先,需要在C++中创建一个类,该类将作为数据模型。假设我们有一个名为Person的类,具有name和age属性:
// person.h
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
class Person : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(int age READ age WRITE setAge NOTIFY ageChanged)
public:
explicit Person(QObject *parent = nullptr);
QString name() const;
void setName(const QString &name);
int age() const;
void setAge(int age);
signals:
void nameChanged();
void ageChanged();
private:
QString m_name;
int m_age;
};
#endif // PERSON_H
// person.cpp
#include "person.h"
Person::Person(QObject *parent) : QObject(parent), m_age(0)
{
}
QString Person::name() const
{
return m_name;
}
void Person::setName(const QString &name)
{
if (m_name == name)
return;
m_name = name;
emit nameChanged();
}
int Person::age() const
{
return m_age;
}
void Person::setAge(int age)
{
if (m_age == age)
return;
m_age = age;
emit ageChanged();
}
接下来,在QML中创建一个ListView,并使用ListModel作为数据模型。在ListView的delegate中,可以访问C++中的属性。
import QtQuick 2.0
ListView {
width: 200
height: 400
model: ListModel {
ListElement {
name: "John"
age: 25
}
ListElement {
name: "Alice"
age: 30
}
}
delegate: Item {
width: parent.width
height: 50
Text {
text: model.name
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
}
Text {
text: model.age
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
}
}
}
在这个例子中,我们使用ListModel作为数据模型,并在model属性中定义了两个ListElement,每个ListElement代表一个Person对象。在delegate中,我们使用Text组件来显示name和age属性。
这样,当QML界面加载时,ListView将会显示C++中的数据。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估。
领取专属 10元无门槛券
手把手带您无忧上云