QT实现对数据库的增删改查、更改文本颜色、替换文本、关闭窗口。

        SQLite是一款轻型的数据库,是遵守ACID的关系式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

1、首先在pro文件中加入:

QT       += core gui sql

2、创建batabase.h文件:

#ifndef DATABASE_H
#define DATABASE_H
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QObject>
static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("database.db");
if(!db.open()) return false;
   QSqlQuery query;
query.exec(QObject::tr("create table student (id int primary key, name vchar)"));
    query.exec(QObject::tr("insert into student values (0,'刘明')"));
    query.exec(QObject::tr("insert into student values (1,'陈刚')"));
    query.exec(QObject::tr("insert into student values (2,'王红')"));
    return true;
}
#endif // DATABASE_H

3、main.cpp代码片段:

#include <QtWidgets>
#include <QApplication>
#include "widget.h"
#include "batabase.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if(!createConnection())
        return 1;
    Widget w;
    w.show();
    return a.exec();
}

4、绘制ui文件

 5、widget.h代码片段:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPalette>
#include <QSqlTableModel>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    QSqlTableModel *model;

private slots:
    void on_checkBoxbold_clicked(bool checked);

    void on_radioButtonred_clicked();

    void on_radioButtongreen_clicked();

    void on_pushButtonqueren_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_4_clicked();

    void on_pushButtonguanbi_clicked();

    void on_tableView_clicked(const QModelIndex &index);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

6、widget.cpp代码片段:

#include "widget.h"
#include "ui_widget.h"
#include <QSqlQueryModel>
#include <QTableView>
#include <QMessageBox>
#include <QSqlError>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    model = new QSqlTableModel(this);
        model->setTable("student");
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
        model->select(); //选取整个表的所有行
        // model->removeColumn(1); //不显示name属性列,如果这时添加记录,则该属性的值添加不上
        ui->tableView->setModel(model);
        //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //使其不可编辑
}

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


void Widget::on_checkBoxbold_clicked(bool checked)
{
    QFont font = ui->lineEditshuru->font();
    font.setBold(checked);
    ui->lineEditshuru->setFont(font);
}


void Widget::on_radioButtonred_clicked()
{
    QPalette plet = ui->lineEditshuru->palette();
    plet.setColor(QPalette::Text, Qt::red);
    ui->lineEditshuru->setPalette(plet);
}

void Widget::on_radioButtongreen_clicked()
{
    QPalette plet = ui->lineEditshuru->palette();
    plet.setColor(QPalette::Text, Qt::green);
    ui->lineEditshuru->setPalette(plet);
}


void Widget::on_pushButtonqueren_clicked()
{
    QString name = ui->lineEditshuru->text();

    ui->labelwenben->setText(name);

}

void Widget::on_pushButton_clicked()
{
    int rowNum = model->rowCount(); //获得表的行数
           int id = 10;
            model->insertRow(rowNum); //添加一行
            model->setData(model->index(rowNum,0),id);
            //model->submitAll(); //可以直接提交
}

void Widget::on_pushButton_2_clicked()
{
    int curRow = ui->tableView->currentIndex().row();
            //获取选中的行
            model->removeRow(curRow);
            //删除该行
            int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定"
         "删除当前行吗?"),QMessageBox::Yes,QMessageBox::No);
            if(ok == QMessageBox::No)
            {
               model->revertAll(); //如果不删除,则撤销
            }
            else model->submitAll(); //否则提交,在数据库中删除该行
}

void Widget::on_pushButton_3_clicked()
{
    model->database().transaction(); //开始事务操作
        if (model->submitAll()) {
            model->database().commit(); //提交
        } else {
            model->database().rollback(); //回滚
            QMessageBox::warning(this, tr("tableModel"),
                                 tr("数据库错误: %1")
                                 .arg(model->lastError().text()));
        }
}

void Widget::on_pushButton_5_clicked()
{
    model->revertAll();
    model->setTable("student");   //重新关联表
    model->select();   //这样才能再次显示整个表的内容
}

void Widget::on_pushButton_4_clicked()
{
    QString name = ui->lineEdit->text();
          model->setFilter(QObject::tr("name = '%1'").arg(name)); //根据姓名进行筛选
          model->select(); //显示结果
}

制作不易,感谢您的点赞👍

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值