五十五、使用 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";
}

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