自定义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"));