qml 访问struct数据

//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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值