QTableview QSqlTableModel如何最恰当地只显示一个表中的某几个字段的数据

来源:互联网 发布:linux运行级别 编辑:程序博客网 时间:2024/05/19 02:21

自定义sqlmodel类继承于QSqlTableModel


正常情况是这样处理,查询所有列表的

model = new SqlModel(this, QSqlDatabase::database("regDatabase"));
model->setTable("regHistory");
tableView = new QTableView(this);
tableView->setModel(model);
model->select();//查询所有列表
当有时候,你只想查询其中几列的时候,如http://bbs.csdn.net/topics/390  网上也没有给出答案。
经过研究,终于找到方法了
model->select(); 该函数据的原型
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;
}
可以看出query是一个sql语句,调用 QSqlQuery qu(query, d->db); 执行查询语句, setQuery(qu);将qu对象和model对象关联了。
这样子我们可以自己顶一个函数sqlquery实现查询某几列的功能
bool SqlModel::sqlQuery(QSqlDatabase db)
{
    /*
    QSqlQuery query;
    query.exec("select recordID from regHistory");
    setQuery(query);
    */
    const QString queryStr = "select a,b,c  from regHistory";//这里是你的sql查询语句
    if (queryStr.isEmpty())
        return false;
    beginResetModel();
    QSqlQuery query(queryStr, db);
    setQuery(query);
    if (!query.isActive() || lastError().isValid()) {
        // something went wrong - revert to non-select state
        endResetModel();
        return false;
    }
    endResetModel();
    return true;
}

查询几列

model = new SqlModel(this, QSqlDatabase::database("regDatabase"));
model->setTable("regHistory");
tableView = new QTableView(this);
tableView->setModel(model);
model->sqlQuery(QSqlDatabase::database("regDatabase"));




0 0
原创粉丝点击