在上篇文章,探索了控制台程序使用SQLite的过程,实际使用中多采用图形界面,本篇探索图形界面使用SQLite的过程。
一、图形界面尝试
1. 新建项目
在 QT creator 中使用向导建立 Qt Widgets Application程序,取名 Qt5-SQLite_GUI,采用默认设置即可。
2.设计界面
既然采用图形界面,那么肯定还有设计图形界面的步骤,双击 mainwindows.ui 会跳转到 Design 界面。添加一个控件 Table View,在 “ Item Views (Model-Based)” 中选取,名字可以保持默认为 tableView。调整窗口和空间的尺寸到合适大小。调整大小可能要根据实际显示再重新调整。
3.代码实现
返回代码,按照前篇,在.pro文件中加入 sql ,
#------------------------------------------------- # # Project created by QtCreator 2014-12-22T14:53:42 # #------------------------------------------------- QT += core gui sql greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = Qt5-SQLite_GUI TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui
在 mainwindow.h 中加入 #include <QtSql> ,在 mainwindow.cpp 中 ui->setupUi(this); 后面添加代码,具体含义见程序注视。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QSql> #include <qDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //add SQLite driver QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //open datebase db.setDatabaseName("data.db"); if(!db.open()){ qDebug()<<"Could not open file!"<<endl; }else{ qDebug()<<"Open file: "<<db.databaseName()<<" sucessfully!"<<endl; } //creat the date model QSqlRelationalTableModel *model; model = new QSqlRelationalTableModel(ui->tableView); //set table model->setTable("product"); //select data model->select(); //set model ui->tableView->setModel(model); } MainWindow::~MainWindow() { delete ui; }
测试运行,注意要将前面创建的文件拷贝过来,不然数据库的内容是空的。用鼠标双击表格,居然还能修改!
二、继续探索
前面程序代码只是实现了显示功能,基本上实现了想法,但是离实际应用还有很大差距。仔细观察运行结果,很自然就会有下面的想法:
- 列的名字能不能重新定义
- 能不能整行选择
- 能不能禁止修改数据
- 最后一列的时间能不能单行就显示完全
这些问题都是需要在下面步骤解决的问题。
1.重新定义列的名字
在 model->setTable(“product”); 后面添加代码
model->setHeaderData(model->fieldIndex("type"), Qt::Horizontal, tr("产品名称")); model->setHeaderData(model->fieldIndex("para1"), Qt::Horizontal, tr("参数1")); model->setHeaderData(model->fieldIndex("para2"), Qt::Horizontal, tr("参数2")); model->setHeaderData(model->fieldIndex("para3"), Qt::Horizontal, tr("参数3")); model->setHeaderData(model->fieldIndex("timestamp"), Qt::Horizontal, tr("时间戳"));
重新编译运行,列的名字已经发生了改变。
2. 整行选择
在 Design 界面,QTableView窗口,将 QAbstractItemView 中的selectionBehavior 改为 SelectRows即可。
3.禁止修改数据
在 Design 界面,QTableView窗口,将 QAbstractItemView 中的 editTriggers 中选中 NoEditTriggers 即可。
4.设定列宽度
添加如下代码即可
//set column 5 's width to 200 ui->tableView->setColumnWidth(4, 200);
最后效果如图