我能否在运行时从 QML 代码调用其方法并更新(更改)当前模型来管理 QSqlQueryModel
的子类? (数据发送到 TableView
)我该怎么做?
我的 QSqlQueryModel
的子类:
class SqlQueryModel : public QSqlQueryModel
{
Q_OBJECT
public:
explicit SqlQueryModel(QObject *parent = 0);
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase());
void setQuery(const QSqlQuery &query);
QVariant data(const QModelIndex &index, int role) const;
QHash<int, QByteArray> roleNames() const { return m_roleNames; }
private:
void generateRoleNames();
QHash<int, QByteArray> m_roleNames;
};
main.cpp:
// ...
SqlQueryModel sqlQueryModel;
QQuickView view;
QQmlContext *context = view.rootContext();
context->setContextProperty("sqlQueryModel", &sqlQueryModel);
// ...
例如,我需要在运行时调用 Q_INVOKABLE
方法 changeModel()
来更改当前模型并使用参数化 SELECT
更新它查询:
void SqlQueryModel::changeModel(const int someValue)
{
QString statement;
QSqlQuery query;
statement = "SELECT * FROM 'tablename' WHERE some_field = ?;";
query.prepare(statement);
query.addBindValue(someValue);
query.exec();
setQuery(query);
}
结果我们将数据更新到 TableView
:
TableView {
id: view
model: sqlQueryModel
TableViewColumn {
title: "1st field"
role: "someValue"
delegate: Text {
text: styleData.value
}
}
TableViewColumn {
title: "2nd field"
role: "oneMoreValue"
delegate: Text {
text: styleData.value
}
}
}
// ...
onSomeSignal: {
// query like this:
sqlQueryModel.changeModel(someValue);
}
是否可以使用 QSqlQueryModel
来实现?请帮我解决这个问题。
UPD:也许,有必要调用像qmlRegisterType()
这样的函数,以便允许使用SqlQueryModel<的
从外部(从 QML)类,然后将 Q_INVOKABLE
方法SqlQueryModel
初始化为 QML 文件中的类型。此后,我们可以将新的 SqlQueryModel
type 连接为 TableView
的数据 model
。
UPD:我不需要编辑存储在数据库中的数据。我希望能够将 SELECT
查询从一个更改为类似。
最佳答案
这很奇怪,但正确答案在问题中。
那里描述的实现工作正常。也许,由于项目源代码中的拼写错误或缺陷,它变得很糟糕。
关于c++ - 如何在运行时改变QSqlQueryModel子类的数据模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32820694/