【问题标题】:trying to access QList of struct members in qml试图访问 qml 中结构成员的 QList
【发布时间】: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 指向错误的方向,因为 MyStructQ_GADGET,在您链接的帖子中甚至没有提到。
  • 我知道它不是另一篇文章中的小工具,我更多地考虑将其作为指针的方向。但同意,这在我的评论中并不清楚

标签: c++ qt struct qml


【解决方案1】:

代码绝对正确。我发现这是 Qt 旧版本中的一个错误。我用 QT 5.14 测试了代码,它完全可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 2013-05-31
    • 2020-01-14
    • 2023-03-22
    相关资源
    最近更新 更多