C++ 尝试访问qml中结构成员的QList

C++ 尝试访问qml中结构成员的QList,c++,qt,struct,qml,C++,Qt,Struct,Qml,我需要知道如何在qml中从qlist访问struct的成员 目前,我只能访问qml中struct的成员,也可以访问简单的qlist,即qString组成的qlist 但是当我试图访问嵌入qlist中的struct的成员时,问题就开始了。 我在C++中创建了一个结构(MyStult),可以在Qml中使用它。我还可以访问QList(即QStrinList) 但是当我试图访问QList时,问题出现了。这给了我一个错误 qrc:/OrderBar.qml:26: TypeError: Cannot re

我需要知道如何在qml中从qlist访问struct的成员

目前,我只能访问qml中struct的成员,也可以访问简单的qlist,即qString组成的qlist

但是当我试图访问嵌入qlist中的struct的成员时,问题就开始了。

我在C++中创建了一个结构(MyStult),可以在Qml中使用它。我还可以访问QList(即QStrinList)

但是当我试图访问QList时,问题出现了。这给了我一个错误

qrc:/OrderBar.qml:26: TypeError: Cannot read property 'name1' of undefined
代码是

QML

C++

测试h

#ifndef TEST_H
#define TEST_H

#include <QObject>

struct MyStruct {
    Q_GADGET
   // Q_OBJECT
    int m_val;

public:
    QString m_name1;
    QString m_name2;
    QString m_name3;
    QString m_name4;
    Q_PROPERTY(int val MEMBER m_val)
    Q_PROPERTY(QString name1 MEMBER m_name1)
    Q_PROPERTY(QString name2 MEMBER m_name2)
    Q_PROPERTY(QString name3 MEMBER m_name3)
    Q_PROPERTY(QString name4 MEMBER m_name4)
};

Q_DECLARE_METATYPE(MyStruct);

class test : public QObject
{
    Q_OBJECT
    Q_PROPERTY(MyStruct mystr READ getMyStruct
               WRITE setMyStruct NOTIFY myStructChanged)

    Q_PROPERTY(QList<MyStruct> lstr READ getLstr
               WRITE setLstr NOTIFY lstrChanged)

public:
    explicit test(QObject *parent = nullptr);


    MyStruct strObj;

    MyStruct getMyStruct() const
    {
        return strObj;
    }


    void setMyStruct(MyStruct val)
    {
        strObj = val;
        emit myStructChanged();
    }

    QList<MyStruct> strList;

    QList<MyStruct>  getLstr() const
    {
        return strList;
    }

    void setLstr(QList<MyStruct> val)
    {
        strList = val;
        emit lstrChanged();
    }



signals:
    void myStructChanged();
    void lstrChanged();

public slots:

};

#endif // TEST_H
\ifndef测试
#定义测试
#包括
结构MyStruct{
Q_小工具
//Q_对象
国际货币基金组织;
公众:
QString m_name1;
QString m_name2;
QString m_name3;
QString m_name 4;
Q_属性(int val成员m_val)
Q_属性(Q字符串名称1成员m_名称1)
Q_属性(Q字符串名称2成员m_名称2)
Q_属性(Q字符串名称3成员m_名称3)
Q_属性(Q字符串名称4成员m_名称4)
};
Q_DECLARE_元类型(MyStruct);
类测试:公共QObject
{
Q_对象
Q_属性(MyStruct mystr READ getMyStruct
写入setMyStruct通知myStructChanged)
Q_属性(QList lstr READ getLstr
写入setLstr通知lstrChanged)
公众:
显式测试(QObject*parent=nullptr);
MyStruct strObj;
MyStruct getMyStruct()常量
{
返回strObj;
}
void setMyStruct(MyStruct val)
{
strObj=val;
emit myStructChanged();
}
QList-strList;
QList getLstr()常量
{
返回strList;
}
void setLstr(QList val)
{
strList=val;
发射lstrChanged();
}
信号:
void myStructChanged();
void lstrchange();
公众时段:
};
#endif//测试
test.cpp

#include "test.h"

test::test(QObject *parent) : QObject(parent)
{
    MyStruct l_value;
    l_value.m_name1 = "b1";
    l_value.m_name2 = "b2";

    setMyStruct(l_value);


     QList<MyStruct> l_strList;

     l_strList.append(l_value);

     setLstr(l_strList);

}
#包括“test.h”
测试::测试(QObject*父级):QObject(父级)
{
MyStruct l_值;
l_value.m_name=“b1”;
l_value.m_name2=“b2”;
setMyStruct(l_值);
QList l_strList;
l_strList.append(l_值);
setLstr(l_strList);
}

这些代码绝对正确。我发现这是Qt旧版本中的一个bug。我用Qt5.14测试了代码,它完全可以工作

也许这是有帮助的,尤其是Bootroo?@Amfasis的答案,我认为你把OP指向了错误的方向,因为
MyStruct
是一个
Q_GADGET
,这在你链接的帖子中甚至没有提到。我知道在另一篇帖子中它不是一个GADGET,我更倾向于把它变成一个指针。但我同意,这在我的评论中并不清楚
#include "test.h"

test::test(QObject *parent) : QObject(parent)
{
    MyStruct l_value;
    l_value.m_name1 = "b1";
    l_value.m_name2 = "b2";

    setMyStruct(l_value);


     QList<MyStruct> l_strList;

     l_strList.append(l_value);

     setLstr(l_strList);

}