利用QTableView类进行数据库可视化操作

开发工具: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();
}


四、界面效果

blob.png

版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[狂码一生] https://www.sindsun.com/articles/16/97
[若此文确切存在侵权,请联系本站管理员进行删除!]


--THE END--