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();
}