我可以在运行时管理QSqlQueryModel
的子类从QML代码调用其方法并更新(更改)当前模型吗? (数据发送到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()
类的Q_INVOKABLE
方法,调用SqlQueryModel
之类的函数是必要的(来自QML)然后在QML文件中初始化SqlQueryModel
作为类型。此后,我们可以将新的SqlQueryModel
类型与TableView
的数据model
相关联。
UPD:我不需要编辑存储在数据库中的数据。我希望能够将SELECT
查询从一个更改为类似。
答案 0 :(得分:0)
这很奇怪,但正确的答案就是问题。
这里描述的实现正常。也许,由于插入到项目源代码中的拼写错误或缺陷,它变得非常糟糕。