我试图从 SQLite 数据库文件中仅显示我的表的 5 行,我使用 QSqlTableModel 获得访问权限并使用 QTableView 在 UI 上显示。
我已经查过了,但还没有在 QSqlTableModel 或 QTableView 中找到一个函数来完成这个。有什么建议吗?
最佳答案
一个可能的解决方案是使用 setFilter("id limit 5")
但此方法将 "Where"
放在字符串之前,这会导致当我想使用 setSort()
它会在顺序中产生语法错误问题,因此我将其丢弃。
为此,我提出了以下解决方案,即创建一个继承自QSqlTableModel
的类,并覆盖selectStatement()
方法。
sqltablemodel.h
#ifndef SQLTABLEMODEL_H
#define SQLTABLEMODEL_H
#include <QSqlTableModel>
class SqlTableModel : public QSqlTableModel
{
int mLimit;
Q_OBJECT
public:
SqlTableModel(QObject *parent = Q_NULLPTR, QSqlDatabase db = QSqlDatabase()): QSqlTableModel(parent, db)
{
mLimit = -1;
}
int limit() const{
return mLimit;
}
void setLimit(int limit){
if(limit > 0)
mLimit = limit;
}
protected:
QString selectStatement() const
{
QString query = QSqlTableModel::selectStatement();
if(mLimit > 0)
query += QString(" LIMIT %1").arg(mLimit);
return query;
}
};
#endif // SQLTABLEMODEL_H
然后将 QSqlTableModel 更改为 SqlTableModel 类并使用 setLimit()
例子:
SqlTableModel *model = new SqlTableModel();
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setSort(0, Qt::DescendingOrder);
model->setLimit(5);
model->select();
//print query
qDebug()<<model->query().lastQuery();
输出:
"SELECT \"id\", \"firstname\", \"lastname\" FROM person ORDER BY person.\"id\" DESC LIMIT 5"
关于c++ - 使用 QtSql.QSqlTableModel 和 QTableView 显示前几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600944/