Qt QML:重新加载模型

Qt QML:重新加载模型,qt,model,qml,Qt,Model,Qml,我在组合框中使用了一个模型。模型在开始时加载良好。但我想重新加载它。我试图使用Q\u INVOKABLE,但它不起作用。 我的模型在标题中定义: class StrategiesModel : public QAbstractListModel { Q_OBJECT public: enum StrategiesRoles{ textRole =Qt::UserRole + 1 }; explicit StrategiesModel(QObject *parent

我在组合框中使用了一个模型。模型在开始时加载良好。但我想重新加载它。我试图使用
Q\u INVOKABLE
,但它不起作用。
我的模型在标题中定义:

class StrategiesModel : public QAbstractListModel
{
Q_OBJECT

public:
   enum StrategiesRoles{
      textRole =Qt::UserRole + 1
   };
   explicit StrategiesModel(QObject *parent = nullptr);

   // Basic functionality:
   int rowCount(const QModelIndex &parent = QModelIndex()) const override;

   QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;

   QHash<int, QByteArray> roleNames() const override;

   Q_INVOKABLE bool loadStrategie();

private:
   QStringList mStrategies;
   const QString mFileName = "listStrategies.txt";
};
我得到了这个错误:

TypeError: Property 'loadStrategie' of object [object Object] is not a function
如何使我的功能可访问


非常感谢

当您使用类的名称时,您没有访问对象,因此无法使用任何方法,您可以通过其
id
使用现有对象:

strategies.model: StrategiesModel{ id: some_model} // First load works
strategies.textRole: "text"

refresh.onClicked: function(){
    some_model.loadStrategie();
}
根据我检查的内容,
loadStrategie
将新数据加载到模型中,以便通知视图您必须在更改前使用
beginResetModel()
,在进行更改后使用
endResetModel()

*.cpp

bool StrategiesModel::loadStrategie()
{
    beginResetModel();
    mStrategies.clear();
    ...
    // Loading list from a file
    ...
    endResetModel();
}

谢谢,它很管用!C++重新加载文件,<>代码> MultReopys/Cord>。但仍然存在一个问题。组合框中的列表保留旧值。但奇怪的是,当我选择一个值(列表中有旧标签)时,一旦选择,新标签就会出现!扩展列表中有旧值,但每个选定值都是正确的。谢谢!!
TypeError: Property 'loadStrategie' of object [object Object] is not a function
strategies.model: StrategiesModel{ id: some_model} // First load works
strategies.textRole: "text"

refresh.onClicked: function(){
    some_model.loadStrategie();
}
bool StrategiesModel::loadStrategie()
{
    beginResetModel();
    mStrategies.clear();
    ...
    // Loading list from a file
    ...
    endResetModel();
}