[增删改查] C++ 之 Qt 连接数据库进行图形界面的 CRUD

版权声明:有问题欢迎留言,转载请声明出处 https://blog.csdn.net/larger5/article/details/78621213

最近同学在做课程设计,要涉及到数据库,但是有的同学接触的语言只有C++,并没有 java ,HTML,等语言,那么要怎么利用现有的C++语言的知识去做一个和数据库有关的信息管理系统呢?
笔者强烈建议使用 Qt Creator C++ 编译器。

一、建立 C++ 项目工程

具体步骤可以见之前的一篇博文

http://blog.csdn.net/larger5/article/details/78587076

二、设计 UI 界面

左边是ui界面,右边显示拖放近ui界面的组件的类型、名称、所属类。

这里写图片描述

三、编写槽函数

槽函数和信号的理解,可以去看之前写过的一篇博文

http://blog.csdn.net/larger5/article/details/78608860

右击 右边的 butonShow 进入槽函数,就会自动创建一个函数,类似 Java Swing编程里边的事件函数
但是比 Java Swing 编程还简单
①有 ui 界面编辑器,只需要把 ui 编辑器 里边的组件托到界面 就可以了,实现0代码编写量 设计 界面
而 Java 的Swing 编程 的组件要自己手写,大小、位置 还要代码来控制,这是很浪费时间的无脑操作。
在 Qt 里边,组件一拖,以拉扯,就好了!
这里写图片描述
②事件函数的编写,自动生成一个类似下面的代码框架,还有很多配置都用xml帮你配置好了。
写起来是很方便的!

void MainWindow::on_buttonShow_clicked()
{
}
void MainWindow::on_buttonShow_clicked()
{
       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");//指定为 mysql 数据库
       db.setHostName("localhost");//本地的话固定
       db.setUserName("root"); //你的数据库的名字
       db.setPassword("123"); //你的数据库的密码
       db.setDatabaseName("car"); //你的数据库里边的一个库名
       QSqlTableModel *model = new QSqlTableModel(this); //一个数据库表可视化模型
       model->setTable("factory"); //你指定的库名里边的表名
       ui->showArea->setModel(model); //显示模型的位置
       model->select(); //显示数据库表
}

四、效果

点击显示汽车按钮,就会从数据中指定的表显示出来,是不是很简单?!表的格式都不用设置了,
只需要一句代码 ui->showArea->setModel(model);

这里写图片描述

当然还可以对数据进行增删改,同样也是几句代码就可以实现了!后续有空再写

五、无法操作数据库

①没有 数据连接文件
下面这个东西网上多的是,去下载就好了,然后放到你安装 Qt Creator 的bin路径下
这里写图片描述
② properties 配置
(每次添加新的的东西时,先编译但是不运行,点击这里写图片描述
注意这里 QT += core gui sql 就好了,就是加上 sql 在 gui 后面

#-------------------------------------------------
#
# Project created by QtCreator ....
#
#-------------------------------------------------

QT += core gui sql

.......
 .......
 .......

六、数据库数据增、删、改、查(2018.4.14更新)

删除

一、ui 设计
这里写图片描述
二、效果

点击所在行,点击删除

这里写图片描述

点击确定

这里写图片描述

三、核心代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlTableModel>
namespace Ui {
       class MainWindow;
}

class MainWindow : public QMainWindow
{
       Q_OBJECT

public:
       explicit MainWindow(QWidget *parent = 0);
       ~MainWindow();

       private slots:
       void on_buttonDel_clicked();

       void on_buttonSure_clicked();

private:
       Ui::MainWindow *ui;
       QSqlTableModel *model;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlTableModel>
#include <QSqlRecord>

MainWindow::MainWindow(QWidget *parent) :
       QMainWindow(parent),
       ui(new Ui::MainWindow)
{
       ui->setupUi(this);
       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("localhost");
       db.setUserName("root");
       db.setPassword("123");
       db.setDatabaseName("car");
       model = new QSqlTableModel(this);
       model->setTable("factory");
       ui->tableView->setModel(model);
       model->select();
       //取消自动提交,设置为人工提交
       model->setEditStrategy(QSqlTableModel::OnManualSubmit);
}

MainWindow::~MainWindow()
{
       delete ui;
}

void MainWindow::on_buttonDel_clicked()
{
       QItemSelectionModel *sModel = ui->tableView->selectionModel();
       QModelIndexList list = sModel->selectedRows();
       for (int i = 0; i<list.size(); i++)
       {
              model->removeRow(list.at(i).row());
       }

}

void MainWindow::on_buttonSure_clicked()
{
       model->submitAll(); //提交动作
}

修改

一、ui 设计

这里写图片描述

二、效果

双击所在行,即可进行编辑
这里写图片描述
点击确定,就会同时修改数据库的信息
这里写图片描述

三、核心代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlTableModel>
namespace Ui {
       class MainWindow;
}

class MainWindow : public QMainWindow
{
       Q_OBJECT

public:
       explicit MainWindow(QWidget *parent = 0);
       ~MainWindow();

       private slots:
       void on_buttonSure_clicked();

private:
       Ui::MainWindow *ui;
       QSqlTableModel *model;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlTableModel>
#include <QSqlRecord>

MainWindow::MainWindow(QWidget *parent) :
       QMainWindow(parent),
       ui(new Ui::MainWindow)
{
       ui->setupUi(this);
       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("localhost");
       db.setUserName("root");
       db.setPassword("123");
       db.setDatabaseName("car");
       model = new QSqlTableModel(this);
       model->setTable("factory");
       ui->tableView->setModel(model);
       model->select();
       //取消自动提交,设置为人工提交
       model->setEditStrategy(QSqlTableModel::OnManualSubmit);
}

MainWindow::~MainWindow()
{
       delete ui;
}

void MainWindow::on_buttonSure_clicked()
{
       model->submitAll();
}

新增

一、ui 设计

这里写图片描述

二、效果

点击新增,即出现新的一行

这里写图片描述
填写 name 即可,点击确定,自动生成 di=5
这里写图片描述
数据库的信息
这里写图片描述

三、核心代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlTableModel>
namespace Ui {
       class MainWindow;
}

class MainWindow : public QMainWindow
{
       Q_OBJECT

public:
       explicit MainWindow(QWidget *parent = 0);
       ~MainWindow();

       private slots:
       void on_buttonSure_clicked();

       void on_buttonNew_clicked();

private:
       Ui::MainWindow *ui;
       QSqlTableModel *model;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlTableModel>
#include <QSqlRecord>

MainWindow::MainWindow(QWidget *parent) :
       QMainWindow(parent),
       ui(new Ui::MainWindow)
{
       ui->setupUi(this);

       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("localhost");
       db.setUserName("root");
       db.setPassword("123");
       db.setDatabaseName("car");
       model = new QSqlTableModel(this);
       model->setTable("factory");
       ui->tableView->setModel(model);
       model->select();
       //取消自动提交,设置为人工提交
       model->setEditStrategy(QSqlTableModel::OnManualSubmit);
}

MainWindow::~MainWindow()
{
       delete ui;
}

void MainWindow::on_buttonSure_clicked()
{
       model->submitAll();
}

void MainWindow::on_buttonNew_clicked()
{
       QSqlRecord record = model->record();
       int row = model->rowCount();
       model->insertRecord(row, record);
}

查找

一、ui 设计

这里写图片描述

二、效果

输入 id=23 点击确定,即可查到对应的一条记录

这里写图片描述

三、核心代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlTableModel>
namespace Ui {
       class MainWindow;
}

class MainWindow : public QMainWindow
{
       Q_OBJECT

public:
       explicit MainWindow(QWidget *parent = 0);
       ~MainWindow();

       private slots:
       void on_buttonCheck_clicked();

private:
       Ui::MainWindow *ui;
       QSqlTableModel *model;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlTableModel>
#include <QSqlRecord>

MainWindow::MainWindow(QWidget *parent) :
       QMainWindow(parent),
       ui(new Ui::MainWindow)
{
       ui->setupUi(this);

       QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("localhost");
       db.setUserName("root");
       db.setPassword("123");
       db.setDatabaseName("car");
       model = new QSqlTableModel(this);
       model->setTable("factory");
       ui->tableView->setModel(model);
       model->select();
       //取消自动提交,设置为人工提交
       model->setEditStrategy(QSqlTableModel::OnManualSubmit);
}

MainWindow::~MainWindow()
{
       delete ui;
}

void MainWindow::on_buttonCheck_clicked()
{
       QString id = ui->lineId->text();
       QString str = QString("id='%1'").arg(id);
       model->setFilter(str);
       model->select();
}
阅读更多

扫码向博主提问

larger5

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Python
  • JavaScript
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页