五十五、使用 QSqlTableModel 限定只显示其中的几列,并限定显示顺序

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章