【发布时间】:2020-01-09 07:57:02
【问题描述】:
我需要知道如何从 qml 中的 qlist 访问 struct 的成员。
目前我只能访问 qml 中的 struct 成员,并且我还能够访问简单的 qlist,即由 qString 制成的 Qlist。
但是当我尝试访问嵌入在 qlist 中的结构成员时,问题就开始了。
我在 c++ 中创建了一个结构 (MyStruct),并且可以在 Qml 中访问它。我还可以访问 QList(即 QStrinList)。
但是当我尝试访问 QList 时出现问题。它给了我错误
qrc:/OrderBar.qml:26: TypeError: Cannot read property 'name1' of undefined
代码是
QML
Text{
//text: myModel2.mystr.name1 // this works
text: myModel2.lstr[0].name1
y: sensor.width + 5
font.family: "Helvetica"
font.pointSize: 10
anchors.horizontalCenter: parent.horizontalCenter
}
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
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);
}
【问题讨论】:
-
也许这个SO 有帮助,尤其是来自 theBooTroo 的回答?
-
@Amfasis 我认为您将 OP 指向错误的方向,因为
MyStruct是Q_GADGET,在您链接的帖子中甚至没有提到。 -
我知道它不是另一篇文章中的小工具,我更多地考虑将其作为指针的方向。但同意,这在我的评论中并不清楚