Qt5 使用 SQLite (2) – 图形界面程序

目录 Content
[hide]

在上篇文章,探索了控制台程序使用SQLite的过程,实际使用中多采用图形界面,本篇探索图形界面使用SQLite的过程。

一、图形界面尝试

1. 新建项目

在 QT creator 中使用向导建立 Qt Widgets Application程序,取名 Qt5-SQLite_GUI,采用默认设置即可。

2.设计界面

既然采用图形界面,那么肯定还有设计图形界面的步骤,双击 mainwindows.ui 会跳转到 Design 界面。添加一个控件 Table View,在 “ Item Views (Model-Based)” 中选取,名字可以保持默认为 tableView。调整窗口和空间的尺寸到合适大小。调整大小可能要根据实际显示再重新调整。

Qt5-SQLite_GUI_Design

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;
}

测试运行,注意要将前面创建的文件拷贝过来,不然数据库的内容是空的。用鼠标双击表格,居然还能修改!

Qt5-SQLite_GUI_run二、继续探索

前面程序代码只是实现了显示功能,基本上实现了想法,但是离实际应用还有很大差距。仔细观察运行结果,很自然就会有下面的想法:

  • 列的名字能不能重新定义
  • 能不能整行选择
  • 能不能禁止修改数据
  • 最后一列的时间能不能单行就显示完全

这些问题都是需要在下面步骤解决的问题。

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);

最后效果如图

qt5-sqlite_gui_result源码下载

扩展阅读

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.