目标:创建一个数据库,添加数据,再Qtableview中显示数据
实现如下:
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QMessageBox>
#include <QStandardItemModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
public:
QSqlDatabase db;
void init();
void initTableView();
private slots:
bool createDb();
bool selectDb();
public:
QStandardItemModel* dataModel ;
};
#endif // MAINWINDOW_H
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <QHeaderView>
#include <QFont>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
init();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::init()
{
connect(ui->pushButtonCreateDb,SIGNAL(clicked(bool)),this,SLOT(createDb()));
connect(ui->pushButtonSelectDb,SIGNAL(clicked(bool)),this,SLOT(selectDb()));
initTableView();
}
void MainWindow::initTableView()
{
dataModel = new QStandardItemModel();
ui->tableView->setModel(dataModel); //绑定数据模型
//设置列表头
dataModel->setColumnCount(3);
dataModel->setHeaderData(0, Qt::Horizontal, "id");
dataModel->setHeaderData(1, Qt::Horizontal, "firstName");
dataModel->setHeaderData(2, Qt::Horizontal, "lastName");
}
bool MainWindow::createDb()
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("SqlDbTest.db");
if (!db.open()) {
QMessageBox::critical(nullptr, QObject::tr("Cannot open database"),
QObject::tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);
return false;
}
QSqlQuery query;
query.exec("create table person (id int primary key, "
"firstname varchar(20), lastname varchar(20))");
query.exec("insert into person values(101, 'Danny', 'Young')");
query.exec("insert into person values(102, 'Christine', 'Holand')");
query.exec("insert into person values(103, 'Lars', 'Gordon')");
query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
query.exec("create table items (id int primary key,"
"imagefile int,"
"itemtype varchar(20),"
"description varchar(100))");
query.exec("insert into items "
"values(0, 0, 'Qt',"
"'Qt is a full development framework with tools designed to "
"streamline the creation of stunning applications and "
"amazing user interfaces for desktop, embedded and mobile "
"platforms.')");
query.exec("insert into items "
"values(1, 1, 'Qt Quick',"
"'Qt Quick is a collection of techniques designed to help "
"developers create intuitive, modern-looking, and fluid "
"user interfaces using a CSS & JavaScript like language.')");
query.exec("insert into items "
"values(2, 2, 'Qt Creator',"
"'Qt Creator is a powerful cross-platform integrated "
"development environment (IDE), including UI design tools "
"and on-device debugging.')");
query.exec("insert into items "
"values(3, 3, 'Qt Project',"
"'The Qt Project governs the open source development of Qt, "
"allowing anyone wanting to contribute to join the effort "
"through a meritocratic structure of approvers and "
"maintainers.')");
query.exec("create table images (itemid int, file varchar(20))");
// query.exec("insert into images values(0, 'images/qt-logo.png')");
// query.exec("insert into images values(1, 'images/qt-quick.png')");
// query.exec("insert into images values(2, 'images/qt-creator.png')");
// query.exec("insert into images values(3, 'images/qt-project.png')");
return true;
}
bool MainWindow::selectDb()
{
QSqlQuery query;
int id;
QString firstname;
QString lastname;
QStandardItem* itemId;
QStandardItem* itemFirstName;
QStandardItem*itemLastName;
query.exec("SELECT id, firstname,lastname FROM person ");
int i = 0;
while (query.next())
{
id = query.value(0).toInt();
firstname = query.value(1).toString();
lastname = query.value(2).toString();
//标准项, 用来保存一个数据项
itemId = new QStandardItem;
itemId->setData(id, 0);
itemFirstName = new QStandardItem;
itemFirstName->setData(firstname, 0);
itemLastName = new QStandardItem;
itemLastName->setData(lastname, 0);
//添加设置数据
dataModel->setItem(i, 0,itemId);
dataModel->setItem(i, 1,itemFirstName);
dataModel->setItem(i, 2,itemLastName);
//设置数据居中显示
dataModel->item(i, 0)->setTextAlignment(Qt::AlignCenter);
//设置数据显示颜色
dataModel->item(i, 0)->setForeground(QBrush(QColor(255, 0, 0)));
i++;
}
return true;
}
实现效果:
点击创建按钮创建一个数据库文件。点击查询显示数据库中的person表