从QML端管理基于QStringList的模型

时间:2014-08-08 06:43:54

标签: qt list qml qstring

我可以将基于QStringList的模型从C ++端暴露给QML as explained here

如何从QML端修改基于QStringList的模型(插入新项目,删除它们)?是否可以从QML调用QStringListModelQStringList的某些函数?

1 个答案:

答案 0 :(得分:2)

来自Qt文档:

  

任何QObject派生类型的方法都可以从QML代码中访问   是:

A public method flagged with the Q_INVOKABLE() macro
A method that is a public Qt slot

您可以拥有一个派生自QObject的经理类,并将其公开给QML。然后,您可以在管理器中实现所需的功能,并从QML端访问它:

class StringListManager : public QObject
{
    Q_OBJECT

public slots:
    void append (QString str) 
    { 
        m_list.append(str); 
    }


private:
    QStringList m_list;
};

还应将StringListManager的实例设置为qml文件的上下文数据:

QQmlEngine engine;
StringListManager manager;
engine.rootContext()->setContextProperty("manager", &manager);

现在您可以从QML端访问manager类的功能:

onClicked: {
    manager.append("From QML");
}