QT实现与数据库交互

时间:2022-10-20 14:03:38

1.widget.h


#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSqlTableModel>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
Q_OBJECT

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

private slots:
void on_pushButtonadd_clicked();

void on_pushButtonsur_clicked();

void on_pushButtoncan_clicked();

void on_pushButtondel_clicked();

void on_pushButtonfind_clicked();

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

2.widgwet.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QSqlQuery>
#include <QVariantList>
#include <QSqlTableModel>
#include <QSqlRecord>
#include <QModelIndexList>
#include <QItemSelectionModel>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//打印Qt支持的数据库驱动
qDebug()<< QSqlDatabase::drivers();
//添加Mysql数据库
QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("cable_test_system");
if(!db.open())
{
QMessageBox::warning(this,"错误",db.lastError().text());
return ;
}
//设置模型
model = new QSqlTableModel(this);
model->setTable("login");
//指定使用哪个表
//把model设置到visual里面
ui->tableView->setModel(model);
//显示model里面的数据
model->select();
model->setHeaderData(0,Qt::Horizontal,"学号");
//设置model的编辑模式,手动提交修改
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
//设置view中的数据库不允许修改
//ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

}

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


void Widget::on_pushButtonadd_clicked()
{
//添加空记录
QSqlRecord record =model->record();//获取空记录
int row =model->rowCount();
model->insertRecord(row,record);
}


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


void Widget::on_pushButtoncan_clicked()
{
model->revertAll();//取消所有动作
model->submitAll();
}


void Widget::on_pushButtondel_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 Widget::on_pushButtonfind_clicked()
{
QString name =ui->lineEdit->text();
QString str=QString("name = '%1'").arg(name);
model->setFilter(str);
model->select();
}

3.运行结果

这是我后台的一个数据库,在qt界面修改,添加和删除等操作,刷新后台数据库表格,会相应发生变化

QT实现与数据库交互