【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();
}
相關文章
相關標籤/搜索