查看 QSqlTableModel
源码发现,在 select()
方法中执行 sql
语句:
bool QSqlTableModel::select()
{
Q_D(QSqlTableModel);
const QString query = selectStatement();
if (query.isEmpty())
return false;
beginResetModel();
d->clearCache();
QSqlQuery qu(query, d->db);
setQuery(qu);
if (!qu.isActive() || lastError().isValid()) {
// something went wrong - revert to non-select state
d->initRecordAndPrimaryIndex();
endResetModel();
return false;
}
endResetModel();
return true;
}
而 sql
语句就是 selectStatement()
返回的,默认按顺序返回整个数据库表的所有字段,所以为了只显示部分字段或者调整字段显示顺序,可以重写 selectStatement()
方法,这里你设定显示的字段和字段顺序,案例如下:
MySqlTableModel.h
#ifndef MYSQLTABLEMODEL_H
#define MYSQLTABLEMODEL_H
#include <QObject>
#include <QSqlTableModel>
class MySqlTableModel : public QSqlTableModel
{
public:
MySqlTableModel(QObject *parent = 0, QSqlDatabase db = QSqlDatabase());
protected:
QString selectStatement() const;
};
#endif // MYSQLTABLEMODEL_H
MySqlTableModel.cpp
#include "mysqltablemodel.h"
MySqlTableModel::MySqlTableModel(QObject *parent, QSqlDatabase db) :
QSqlTableModel(parent, db)
{
}
QString MySqlTableModel::selectStatement() const
{
//返回需要显示的字段和设置字段顺序
return "select empNo from employee";
}