前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用QTableView类进行数据库可视化操作

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

作者头像
Sindsun
发布2019-12-11 16:03:52
1.3K0
发布2019-12-11 16:03:52
举报
文章被收录于专栏:狂码一生狂码一生

开发工具:Qt Creator 4.2.1 (Community)

开发平台:windows 7

数据库:MySql 5.5.45

一、在.pro配置文件中添加添加数据库

代码语言:javascript
复制
QT       += core gui sql   #后面追加上sql

二、mywidget.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档