查看 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";
}