Qt-QML-C++;作为自定义ListView模型的结构的QList

Qt-QML-C++;作为自定义ListView模型的结构的QList,qt,listview,qml,qt-quick,Qt,Listview,Qml,Qt Quick,我的项目中有一个包含结构元素列表的二进制文件: typedef struct { unsigned int id; char name[SIZE]; } Entry; 从文件中读取数据后,我将所有读取值存储在我的类的以下字段中: QVector<Entry> entires; 如何访问保存在结构列表上的数据并在QML中显示 更新: 在你的建议之后,我稍微修改了代码,现在编译的很好。已创建以下类: class EntryClass: QObj

我的项目中有一个包含结构元素列表的二进制文件:

typedef struct {
    unsigned int   id;
    char           name[SIZE];
} Entry;
从文件中读取数据后,我将所有读取值存储在我的类的以下字段中:

QVector<Entry> entires;
如何访问保存在结构列表上的数据并在QML中显示

更新: 在你的建议之后,我稍微修改了代码,现在编译的很好。已创建以下类:

class EntryClass: QObject
{
    Q_OBJECT
    Q_PROPERTY(QString entry_name READ getEntryName)
public:
    inline EntryClass(Entry entrystruct)
    {
        this->entry = entrystruct;
    }
private:
    Entry entry;

    inline QString getEntryName() const
    {
        return this->entry->entry_name;
    }    
};

ListView {
    id: myListView
    width: 200
    height: 400

    model: myInjectedObject.FileContents

    delegate: Row {
        spacing: 10       
        Text {
            text: modelData.entry_name // (1)
            font.pixelSize: 12
            horizontalAlignment: "AlignHCenter"
            verticalAlignment: "AlignVCenter"
            height: 20
        }
    }
}
更新2 好的,经过进一步的分析,我终于找到了有效的解决方案。关于上面的ListView声明,它被更新为当前状态(通过引用传递struct不起作用,我必须使用copy by value)

这两个答案在某种程度上都很有帮助,但由于只有一个答案可以被接受,我将接受Radon写的第一个答案。 谢谢你们两位的指导

QML无法访问“低级”结构类型

但是您可以创建一个类
EntryClass
,该类继承并添加
id
name
as(内部
EntryClass
可以使用相应的
条目
结构实例的数据,例如,通过使用指向它的指针)。然后您应该能够在QML中访问这些属性

(但我没有测试它)

QML无法访问“低级”结构类型

但是您可以创建一个类
EntryClass
,该类继承并添加
id
name
as(内部
EntryClass
可以使用相应的
条目
结构实例的数据,例如,通过使用指向它的指针)。然后您应该能够在QML中访问这些属性


(但我没有测试它)

Radon是对的,导出到QML的对象需要属性(或Q_可调用函数)


此外,QVector也不起作用。您需要使用或QVariantList作为属性类型。

如果是正确的,则导出到QML的对象需要属性(或Q_可调用函数)

此外,QVector也不起作用。您需要使用或QVariantList作为属性类型

inline QVector<Entry> getEntries () 
{ 
    return this->entires; 
}

inline void setEntries(QVector<entires> entries) 
{ 
    this->entires= entries; 
    emit TmpFileUpdated(); 
}
ListView {
    id: myListView
    width: 200
    height: 400

    model: myInjectedObject.FileContents

    delegate: Row {
        spacing: 10         
        Text {
            text: model.entry_type // (1)
            font.pixelSize: 12
            horizontalAlignment: "AlignHCenter"
            verticalAlignment: "AlignVCenter"
            height: 20
        }
    }
}
class EntryClass: QObject
{
    Q_OBJECT
    Q_PROPERTY(QString entry_name READ getEntryName)
public:
    inline EntryClass(Entry entrystruct)
    {
        this->entry = entrystruct;
    }
private:
    Entry entry;

    inline QString getEntryName() const
    {
        return this->entry->entry_name;
    }    
};

ListView {
    id: myListView
    width: 200
    height: 400

    model: myInjectedObject.FileContents

    delegate: Row {
        spacing: 10       
        Text {
            text: modelData.entry_name // (1)
            font.pixelSize: 12
            horizontalAlignment: "AlignHCenter"
            verticalAlignment: "AlignVCenter"
            height: 20
        }
    }
}