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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值