61黑马QT笔记之可视化操作数据库(第一部完结)

61黑马QT笔记之可视化操作数据库(第一部完结)

前提:之前我们在样式表那里说到了ui提供的各种样式,但是没有说明Item-View;他就是可视化操作数据库重要的样式,也叫Model-View。他是怎么操作的呢?下面我将介绍。

1 Model-View是如何从数据库取数据可视化处理的?我们将这个单词拆开来理解。
1)Model:代表将数据库的数据加载进来;
2)View:将Model的数据在在ui上面显示。

2 代码

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
#include<QSqlDatabase>
#include<QMessageBox>
#include<QSqlError>
#include<QSqlQuery>
#include<QVariantList> //可变列表赋值
#include<QString>
#include<QSqlRecord>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);


    qDebug()<<QSqlDatabase::drivers();

   QSqlDatabase db= QSqlDatabase::addDatabase("QMYSQL");


   db.setHostName("127.0.0.1");
   db.setUserName("root");
   db.setPassword("123456");
   db.setDatabaseName("test");    //使用哪个数据库

   if(db.open() == false)
   {
       QMessageBox::warning(this,"error",db.lastError().text());
       return;
   }

   //1 设计模型
   model=new QSqlTableModel(this);
   model->setTable("student");
   ui->tableView->setModel(model); // 在ui的table view上(但仍未显示)

   //2 利用model进行操作显示(显示在ui界面,到这里就可以完整的显示出数据库的数据)
   model->select();                // 不用sql语句 select已经封装好函数

   //为字段改人性化名字 (即显示时以学号显示 但数据库不会改变)
   model->setHeaderData(0,Qt::Horizontal,"学号");// 参1为哪一列 类似query.value(0).toInt() 参2为常量水平或者竖直
   model->setHeaderData(1,Qt::Horizontal,"名字");// 这个改变不会影响到数据库 直接在窗口改就会

   //3 设置编辑策略为手动修改,只有手动确认才行
   model->setEditStrategy(QSqlTableModel::OnManualSubmit);

   //4 设置ui的tableview 为只读         即与文本编辑可读类似,不过他在ui设置,这里直接语句设置
   //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //注意是ui

}

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

// 增加一行数据
void Widget::on_buttonAdd_clicked()
{
    QSqlRecord record = model->record();  // 获取空行

    int row = model->rowCount();          // 获取当前行数,用来作空行的下标(因为以0开始嘛)

    model->insertRecord(row,record);      // 插入一行 row为新行的下标
}

// 删除按钮
void Widget::on_buttonDel_clicked()
{

    //分三步 1找出ui选中要删除的区域 2取出他们对应的索引 3利用索引找出行号删除

    QItemSelectionModel *smodel = ui->tableView->selectionModel();
    QModelIndexList list = smodel->selectedRows(); //取出索引
        for(int i=0 ; i < list.size(); i++)  //list.size()表示有多少个索引
    {
        model->removeRow(list.at(i).row()); //list.at(i)表示取出表中第一行对应的索引  .row()表示取出对应行号
    }

}

// 修改可以直接将数据 在界面修改 所以不需要按钮

// 查找按钮
void Widget::on_buttonFind_clicked()
{
    QString name = ui->lineEdit->text();
    QString str = QString("name='%1'").arg(name);  //单引号不打不行 因为字符串必须增加单引号 类似数据库的格式
    model->setFilter(str); //过滤条件只需要sql语句select中的where条件 故上面只需组name='名字'
    model->select();
}

// 确定按钮
void Widget::on_buttonSure_clicked()
{
    model->submitAll();                   // 提交数据
}

// 取消按钮
void Widget::on_buttonCancel_clicked()
{
    model->revertAll();                   // 取消所有动作
    model->submitAll();                   // 取消也是动作 所以提交所有动作

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值