生活随笔
收集整理的這篇文章主要介紹了
Qt 学习之路 :可视化显示数据库数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面我們用了兩個章節介紹了 Qt 提供的兩種操作數據庫的方法。顯然,使用QSqlQuery的方式更靈活,功能更強大,而使用QSqlTableModel則更簡單,更方便與 model/view 結合使用(數據庫應用很大一部分就是以表格形式顯示出來,這正是 model/view 的強項)。本章我們簡單介紹使用QSqlTableModel顯示數據的方法。當然,我們也可以選擇使用QSqlQuery獲取數據,然后交給 view 顯示,而這需要自己給 model 提供數據。鑒于我們前面已經詳細介紹過如何使用自定義 model 以及如何使用QTableWidget,所以我們這里不再詳細說明這一方法。
我們還是使用前面一直在用的 student 表,直接來看代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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。
在設置好 model 之后,我們又創建了QTableView對象作為視圖。注意這里的設置:單行選擇,按行選擇。resizeColumnsToContents()說明每列寬度適配其內容;setEditTriggers()則禁用編輯功能。最后,我們設置最后一列要充滿整個窗口。我們的代碼中有一行注釋,設置第一列不顯示。由于我們使用了QSqlTableModel方式,不能按列查看,所以我們在視圖級別上面做文章:將不想顯示的列隱藏掉。
接下來運行代碼即可看到效果:
如果看到代碼中很多“魔術數字”,更好的方法是,使用一個枚舉將這些魔術數字隱藏掉,這也是一種推薦的方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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();
}
總結
以上是生活随笔 為你收集整理的Qt 学习之路 :可视化显示数据库数据 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。