//1、按照如下格式定义好struct数据结构
struct T_ShareData
{
Q_GADGET
Q_PROPERTY(QString name MEMBER name)
Q_PROPERTY(quint32 num MEMBER num)
public:
quint32 num;
QString name;
};
Q_DECLARE_METATYPE (T_ShareData)
class ListShare : public QList<T_ShareData>
{
Q_GADGET
public:
Q_INVOKABLE QVariantList toVariantList() const
{
QVariantList result;
for (const T_ShareData &item : *this)
{
result.append(QVariant::fromValue(item));
}
return result;
}
};
Q_DECLARE_METATYPE (ListShare)
//2、在.cpp注册类型
qRegisterMetaType<T_ShareData>();
qRegisterMetaType<ListShare>();
//3、完成以上两个步骤,我们就已经在qml注册好struct数据结构了。接下来定义一个类来使用它们
//.h
class Object : public QObject
{
Q_OBJECT
public:
explicit Object(QObject *parent = nullptr);
Q_INVOKABLE T_ShareData setData(QString name, int num);
Q_INVOKABLE ListShare getList();
};
//.cpp
Object::Object(QObject *parent) : QObject(parent)
{
}
T_ShareData Object::setData(QString name, int num)
{
T_ShareData data;
data.name = name;
data.num = num;
return data;
}
ListShare Object::getList()
{
ListShare list;
for(int i=0; i<10; i++)
{
T_ShareData data;
data.name = QString::number(i);
data.num = i + 10;
list.push_back(data);
}
return list;
}
//4、在qml中直接使用
function test(){
var data = obj.setData("hello", 100)
console.log(data.name +" " + data.num)
var list = obj.getList().toVariantList()
for(var i=0; i<list.length; i++){
var item = list[i]
console.log(item.name + " " + item.num)
}
}
测试运行,结果如下:
参考博文:https://qa.1r1g.com/sf/ask/3195519421/