QSqlTableModel/ QTableView 解析查询到xml

Posted

技术标签:

【中文标题】QSqlTableModel/ QTableView 解析查询到xml【英文标题】:QSqlTableModel/ QTableView parsing queries to xml 【发布时间】:2012-11-21 21:09:03 【问题描述】:

这是我在这个论坛上的第一篇文章,我希望我寻求解决的问题得到清楚的解释。我正在使用 QSqlTableModel 和 QSqlTableView 查看数据库表。缓存表模型是我一直在寻找的,这就是我选择 QSqlTableModel 的原因(还有其他模型吗?)。现在我需要将所有缓存的查询解析为 xml,一旦我执行 submitAll() - 我选择了 OnManualSubmit 作为编辑策略。我尝试编写 QSqlTableModel 的子类并重载 insertRowInTable/updateRowInTable/deleteRowFromTable,但是缓存是通过指向私有类的 d 指针访问的,我找不到另一种方法来获取缓存的准备语句,然后将它们解析为 xml .这是我认为不可能的解决方案吗?

我期待任何答复。

【问题讨论】:

【参考方案1】:

QSqlTableModel继承QSqlQueyModel,有一个公共的

QSqlQuery QSqlQueryModel::query () const

您可以连接到 QSqlTableModel 发出的四个更改信号

void    beforeDelete ( int row )
void    beforeInsert ( QSqlRecord & record )
void    beforeUpdate ( int row, QSqlRecord & record )
void    primeInsert ( int row, QSqlRecord & record )

(问题:我认为 primeInsert 和 BeforeInsert 可以为同一个事件发出,不确定)

子类化并重新实现 submit() 以在调用父提交之前发出包含 QSqlQuery 的信号:

bool YourChildModel::submit ()
 
    emit yourSignal(query());
    return QSqlTableModel::submit()
 

QsqlQuery有

QString QSqlQuery::lastQuery () const
Returns the text of the current query being used, or an empty string if there is no current query text.

QString QSqlQuery::executedQuery () const
Returns the last query that was successfully executed.
In most cases this function returns the same string as lastQuery(). If a prepared query with placeholders is executed on a DBMS that does not support it, the preparation of this query is emulated. The placeholders in the original query are replaced with their bound values to form a new query. This function returns the modified query. It is mostly useful for debugging purposes.

这将用于解析为 xml。

【讨论】:

以上是关于QSqlTableModel/ QTableView 解析查询到xml的主要内容,如果未能解决你的问题,请参考以下文章

如何在保留选择的同时刷新 QSqlTableModel?

子类化 QSqlTableModel 插入新值

如何用 QSqlTableModel 中的列替换行?

将行插入 QSqlTableModel

如何在一个 QTableView 中显示多个 QSqlTableModel 的内容?

Qt开发,tableview和QSqltableModel结合使用,当数据多于256,tableview->scrollToBottom()就只到第256个