前面我们用了两个章节介绍了 Qt 提供的两种操作数据库的方法。显然,使用 QSqlQuery 的方式更灵活,功能更强大,而使用 QSqlTableModel 则更简单,更 方便与model/view 结合使用(数据库应用很大一部分就是以表格形式显示出来, 这正是model/view 的强项)。本章我们简单介绍使用 QSqlTableModel 显示数据 的方法。当然,我们也可以选择使用 QSqlQuery 获取数据,然后交给 view 显示,  而这需要自己给model 提供数据。
我们还是使用前面一直在用的 student 表,直接来看代码:
int main(int argc, char *argv[]){
QApplication a(argc, argv);if (connect("demo.db")) {
QSqlTableModel *model = new QSqlTableModel;model->setTable("student");
model->setSort(1, Qt::AscendingOrder);
model->setHeaderData(1, Qt::Horizontal, "Name"); model->setHeaderData(2, Qt::Horizontal, "Age"); model->select();
QTableView *view = new QTableView;view->setModel(model); 
view->setSelectionMode(QAbstractItemView::SingleSelection); 
view->setSelectionBehavior(QAbstractItemView::SelectRows);
//      view->setColumnHidden(0, true);
view->resizeColumnsToContents();view->setEditTriggers(QAbstractItemView::NoEditTriggers); Interviewer *header = view->horizontalHeader(); header->setStretchLastSection(true); view->show(); } else { return 1; } return a.exec(); }

这里的connect()函数还是我们前面使用过的(11.1),

我们在 main()函数中创建了 QSqlTableModel 对象, 使用 student 表。 student 表有三列:id,name 和 age,我们选择按照 name 排序,使用 setSort()函数 达到这一目的。然后我们设置每一列的列头。这里我们只使用了后两列, 第一列 没有设置,所以依旧显示为列名 id。
 
在设置好 model 之后, 我们又创建了 QTableView 对象作为视图。注意这里的设 置: 单行选择,按行选择。 resizeColumnsToContents()说明每列宽度适配其内 容;setEditTriggers()则禁用编辑功能。最后,我们设置最后一列要充满整个 窗口。我们的代码中有一行注释,设置第一列不显示。

京ICP备14028175号-6