Qt5.7使用自带SQLITE的小的可视化数据库

博客介绍了QT5.7与SQLite数据库的基本运用。在每个函数中操作数据库时,即便QSqlQuery query已声明为全局对象,仍需即时声明,否则会报错。还给出了完整项目源码的github下载地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现效果图:
QT5.7SQLITE数据库运用,实现的小系统

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
#include <QColorDialog>
#include <QListWidget>


QSqlQuery query;
QSqlDatabase db;
QSqlQueryModel*model;

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


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


void Widget::on_creat_sql_Button_clicked()
{
    bool query_OK=0;
    db=QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("stu.db");
    bool ok=db.open();
    if(ok)
       QMessageBox::information(this,"Information","open sucessfully");
    else
       QMessageBox::information(this,"Information","open fail");
    QSqlQuery query;
    query_OK= query.exec("create table stu(name vchar primary key,sex vchar ,number vchar)");
    if(query_OK)
    {
        qDebug()<< "create table success!";
    }
    else
    {
        qDebug()<< "create table fail!"  << db.lastError();

    }
    show_view();
}



void  Widget::show_view()
{
   model = new QSqlQueryModel(this);
   model->setQuery("select * from stu");
   model->setHeaderData(0,Qt::Horizontal,tr("Name"));
   model->setHeaderData(1,Qt::Horizontal,tr("Sex"));
   model->setHeaderData(2,Qt::Horizontal,tr("Number"));
   ui->tableView->setModel(model);
}


void Widget::on_save_pushButton_clicked()
{
    name=ui->name_lineEdit->text();
        sex=ui->sex_comboBox->currentText();
        number=ui->number_lineEdit->text();
        if(name.isEmpty() || sex.isEmpty() || number.isEmpty())
        {
            QMessageBox::warning(this,"Incomplete information","error");
            return;
        }
        QString insert_buf;
        QSqlQuery query;
        insert_buf=QObject::tr("insert into stu values('%1','%2','%3')").arg(name,sex,number);
        query.exec(insert_buf);
        show_view();
        clear_focus();

}



void Widget::clear_focus()
{
   ui->name_lineEdit->clear();
   ui->number_lineEdit->clear();
   ui->name_lineEdit->setFocus();
}




void Widget::on_find_pushButton_clicked()
{
    find_buf=ui->find_lineEdit->text();
       QSqlQuery query;
       query.exec("select * from stu");
       query.isActive();
       while(query.next())
       {
           QString ele0=query.value(0).toString();
           QString ele1=query.value(1).toString();
           QString ele2=query.value(2).toString();
           if((ele0==find_buf) || (ele1==find_buf) || (ele2==find_buf))
           {
              ui->name_lineEdit->setText(ele0);
              ui->sex_comboBox->setCurrentText(ele1);
              ui->number_lineEdit->setText(ele2);
              return;
           }
        }
       QMessageBox::information(this,"Not Find","No this record",QMessageBox::Ok);
}



void Widget::on_delete_pushButton_clicked()
{
    QString delete_buf;
      delete_buf=ui->delete_lineEdit->text();
       QSqlQuery query;
      query.exec("select * from stu");
      query.isActive();
      QString insert_buf;
      while(query.next())
      {
          QString ele0=query.value(0).toString();
          QString ele1=query.value(1).toString();
          QString ele2=query.value(2).toString();
          if((ele0==delete_buf) || (ele1==delete_buf) || (ele2==delete_buf))
          {
             if(ele0==delete_buf)
             {
                insert_buf=QObject::tr("delete from stu where name='%1'").arg(delete_buf);
             }
             else if(ele0==delete_buf)
             {
                insert_buf=QObject::tr("delete from stu where sex='%1'").arg(delete_buf);
             }
             else if(ele0==delete_buf)
             {
                insert_buf=QObject::tr("delete from stu where number='%1'").arg(delete_buf);
             }
             bool ok=query.exec(insert_buf);
             if(ok)
                 QMessageBox::information(this,"delete successfully","Ok",QMessageBox::Ok);
             else
                 QMessageBox::information(this,"delete fail","Error",QMessageBox::Ok);
             show_view();
             return;
          }
      }
      QMessageBox::information(this,"Delete Error","No this record",QMessageBox::Ok);
}


void Widget::on_change_pushButton_clicked()
{
    ui->delete_lineEdit->setText(find_buf);
       on_delete_pushButton_clicked();
       on_save_pushButton_clicked();
       ui->delete_lineEdit->clear();
}


void Widget::on_pallette_clicked()
{
    //颜色对话框设置
    QColorDialog::setCustomColor(0,QRgb(0x0000FF));
    //定义QColor接收值
    QColor color = QColorDialog::getColor(QColor(0,255,0));
    //定义QPalette(调色板类)
    QPalette p = palette();
    //调色板接收颜色
    p.setColor(QPalette::WindowText,QColor(color));
    //给label 绑定颜色
}

其实都只是很基本的数据库的运用而已,其中需要注意的地方是似乎在每个函数中操作数据库的时候,都需要先QSqlQuery query;即时声明了QSqlQuery query为全局对象,如果在各个函数中不声明QSqlQuery query的话依然会报错,作为新手表示不太懂,希望指点。
完整项目源码地址在我的github中下载:
https://github.com/impressJay/QT5.7SQLITE

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式软硬件叶玄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值