开发工具:Qt Creator 4.2.1 (Community)
开发平台:windows 7
数据库:MySql 5.5.45
一、在.pro配置文件中添加添加数据库
QT += core gui sql #后面追加上sql
二、mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlTableModel>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QTextCodec>
namespace Ui {
class MyWidget;
}
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = 0);
~MyWidget();
private slots:
void on_pushButtonAdd_clicked();
void on_pushButtonConfirm_clicked();
void on_pushButtonCancel_clicked();
void on_pushButtonDelete_clicked();
void on_pushButtonFind_clicked();
private:
Ui::MyWidget *ui;
//声明一个表格模型指针
QSqlTableModel *model;
};
#endif // MYWIDGET_H
三、mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::MyWidget)
{
ui->setupUi(this);
//设置编码,有时候查出来的中文是乱码的,这里设置为utf-8
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
//打印QT支持的数据库驱动
qDebug() << QSqlDatabase::drivers();
//指定MYSQL数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("123456");
db.setPort(3306);
db.setDatabaseName("test");
//db.exec("set names gb2312");
//打开数据库
if(!db.open()){ //数据库打开失败
QMessageBox::warning(this, "warming", db.lastError().text());
return;
}else{
QMessageBox::information(this, "msg", "连接成功");
}
//设置模型
model = new QSqlTableModel(this);
//指定使用哪个数据表
model->setTable("student");
//把model放在view里面
ui->tableViewShow->setModel(model);
//显示model里的数据
model->select();
//设置表头
model->setHeaderData(0,Qt::Horizontal, "编号");
model->setHeaderData(1,Qt::Horizontal, "姓名");
model->setHeaderData(2,Qt::Horizontal, "密码");
//设置model的编辑模式,手动提交修改
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
//禁止对数据库进行修改
//ui->tableViewShow->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
MyWidget::~MyWidget()
{
delete ui;
}
//增加
void MyWidget::on_pushButtonAdd_clicked()
{
//添加空记录
//获取空记录
QSqlRecord record = model->record();
//获取行号
int row = model->rowCount();
model->insertRecord(row,record);
}
//确定
void MyWidget::on_pushButtonConfirm_clicked()
{
model->submitAll(); //提交动作
}
//取消
void MyWidget::on_pushButtonCancel_clicked()
{
model->revertAll(); //取消所有动作
model->submitAll(); //提交动作
}
//删除
void MyWidget::on_pushButtonDelete_clicked()
{
//获取选中的模型
QItemSelectionModel *sModel = ui->tableViewShow->selectionModel();
//取出模型中的索引
QModelIndexList list = sModel->selectedRows();
//删除所有选中的行
for(int i=0; i < list.size(); i++){
model->removeRow( list.at(i).row() );
}
}
//查找
void MyWidget::on_pushButtonFind_clicked()
{
QString keywords = ui->lineEditKeywords->text();
QString str = QString("uname like '\%%1\%'").arg(keywords);
//设置过滤条件
model->setFilter(str);
model->select();
}
四、界面效果
权声明: 此文为本站源创文章或由本站编辑从网络整理改编,
转载请备注出处: 狂码一生 (https://cloud.tencent.com/developer/article/1552468)