为什么在使用C++QAbstractListModel时需要`text:model.display.foo`而不仅仅是`



我是Qt/QtQuick的新手。

我有一个用Qt设计器设计的简单表单,它由一个ListView唯一组成。

Item {
    // ... 
    ListView {
        id: listView1
        anchors.fill: parent
        model: FooModel
        delegate: Item {
            // ... 
            Row {
                id: row1
                Text {
                    text: foo
                    // ... 
                }
            }
        }
    }
}

这可以很好地与以下内容配合使用——或者将其复制粘贴为model,或者让qmlscene或Qt Designer注意到dummydata:中包含的FooModel.qml

ListModel {
    ListElement {
        foo: "1"
    }
    ListElement {
        foo: "2"
    }
    ListElement {
        foo: "3"
    }
    ListElement {
        foo: "4"
    }
}

但是,当我试图用QAbstractListModel的子类的实际C++模型替换我的伪模型时,我必须在delegate:中用text: model.display.foo替换text: foo

delegate: Item {
        // ... 
        Row {
            id: row1
            Text {
                text: model.display.foo // <=== See? 
                // ... 
            }
        }
    }

如果我不这样做,Qt抱怨

qrc:/MainForm.ui.qml:23:ReferenceError:foo未定义

并且什么也不显示。

我在main.cpp:中这样设置模型属性

FooListModel* flm= new FooListModel();
QQmlContext *ctxt = engine.rootContext();
ctxt->setContextProperty("FooModel", flm);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();

为什么

此外,假设"这是一个功能,而不是一个bug",必须更改text属性意味着我不能再在QtDesigner中拥有我的伪数据,也不能使用内联模型进行原型设计我能以任何方式避免这种情况吗


请在Github上找到有问题的MWE

qrc:/MainForm.ui.qml:23: ReferenceError: foo is not defined

意味着您必须在FooListModel中定义foo角色。例如,

class FooListModel : public QAbstractListModel
{
public:
    enum FooListModelRoles 
    {
        FooRole = Qt::UserRole + 1,
        BarRole, 
        //...
    }
    QHash<int, QByteArray> roleNames() const //override
    {
        QHash<int, QByteArray> roleName;
        roleName[FooRole] = "foo";  //define "foo" role for QML
        roleName[BarRole] = "bar";  //define "bar" role for QML
        return roleName;
    }
    //...
}

QML中的代表现在可以访问foo角色。

此外,假设"这是一个功能,而不是一个错误">

是的,text: model.display.foo工作正常,因为displayQAbstractItemModel中预定义的角色。

相关内容

  • 没有找到相关文章

最新更新