【Qt笔记】可视化显示数据库数据

前面咱们用了两个章节介绍了 Qt 提供的两种操做数据库的方法。显然,使用QSqlQuery的方式更灵活,功能更强大,而使用QSqlTableModel则更简单,更方便与 model/view 结合使用(数据库应用很大一部分就是以表格形式显示出来,这正是 model/view 的强项)。本章咱们简单介绍使用QSqlTableModel显示数据的方法。固然,咱们也能够选择使用QSqlQuery获取数据,而后交给 view 显示,而这须要本身给 model 提供数据。鉴于咱们前面已经详细介绍过如何使用自定义 model 以及如何使用QTableWidget,因此咱们这里再也不详细说明这一方法。sql

 

咱们仍是使用前面一直在用的 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);

        QHeaderView *header = view->horizontalHeader();
        header->setStretchLastSection(true);

        view->show();
    } else {
        return 1;
    }
    return a.exec();
}

这里的connect()函数仍是咱们前面使用过的,咱们主要关注剩下的代码。函数

正如前一章的代码所示,咱们在main()函数中建立了QSqlTableModel对象,使用 student 表。student 表有三列:id,name 和 age,咱们选择按照 name 排序,使用setSort()函数达到这一目的。而后咱们设置每一列的列头。这里咱们只使用了后两列,第一列没有设置,因此依旧显示为列名 id。.net

在设置好 model 以后,咱们又建立了QTableView对象做为视图。注意这里的设置:单行选择,按行选择。resizeColumnsToContents()说明每列宽度适配其内容;setEditTriggers()则禁用编辑功能。最后,咱们设置最后一列要充满整个窗口。咱们的代码中有一行注释,设置第一列不显示。因为咱们使用了QSqlTableModel方式,不能按列查看,因此咱们在视图级别上面作文章:将不想显示的列隐藏掉。code

接下来运行代码便可看到效果:对象

若是看到代码中不少“魔术数字”,更好的方法是,使用一个枚举将这些魔术数字隐藏掉,这也是一种推荐的方式:排序

enum ColumnIndex
{
    Column_ID = 0,
    Column_Name = 1,
    Column_Age = 2
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if (connect("demo.db")) {
        QSqlTableModel *model = new QSqlTableModel;
        model->setTable("student");
        model->setSort(Column_Name, Qt::AscendingOrder);
        model->setHeaderData(Column_Name, Qt::Horizontal, "Name");
        model->setHeaderData(Column_Age, Qt::Horizontal, "Age");
        model->select();

        QTableView *view = new QTableView;
        view->setModel(model);
        view->setSelectionMode(QAbstractItemView::SingleSelection);
        view->setSelectionBehavior(QAbstractItemView::SelectRows);
        view->setColumnHidden(Column_ID, true);
        view->resizeColumnsToContents();
        view->setEditTriggers(QAbstractItemView::NoEditTriggers);

        QHeaderView *header = view->horizontalHeader();
        header->setStretchLastSection(true);

        view->show();
    } else {
        return 1;
    }
    return a.exec();
}
相关文章
相关标签/搜索