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 
#include 
#include 
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 
#include 
#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文件

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

 5、widget.h代码片段:

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
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 
#include 
#include 
#include 
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(); //显示结果
}

制作不易,感谢您的点赞

你可能感兴趣的:(c++,qt,ui)