Qt + modelView ,数据库

为了能够使用本机电脑上的SQL,这里使用的是Qt 4.9.0 版本,

工程目录:

ui:

 

mywidget.h:

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>
#include <QSqlTableModel>
namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MyWidget(QWidget *parent = nullptr);
    ~MyWidget();

private slots:
    void on_buttonAdd_clicked();

    void on_buttonSure_clicked();

    void on_buttonCancel_clicked();

    void on_buttonDel_clicked();

    void on_buttonFind_clicked();

private:
    Ui::MyWidget *ui;


    QSqlTableModel *model;
};

#endif // MYWIDGET_H

 

 

mywidget.cpp:

#include "mywidget.h"
#include "ui_mywidget.h"

#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>//专门对SQL语句操作的类
#include <QVariantList>

#include <QSqlRecord>

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

    //打印Qt支持的数据库驱动
    qDebug()<<QSqlDatabase::drivers();

    //添加MySql数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    //连接数据库
    db.setHostName("127.0.0.1");//数据库服务器IP
    db.setUserName("root");//数据库用户名
    db.setPassword("123");//密码
    db.setDatabaseName("studentmanager");//使用哪个数据库

    //打开数据库  只有打开数据库才能进行下面的操作: 增 删 改 查
    if(db.open() == false)
    {
        QMessageBox::warning(this,"错误",db.lastError().text());
        return;
    }

    //设置模型
    model = new QSqlTableModel(this);
    model->setTable("student");//指定使用哪个表

    //把model 放在view
    ui->tableView->setModel(model);

    //显示model 里面的数据
    model->select();

//    //通过修改界面上的文字提高可读性
//    model->setHeaderData(0,Qt::Horizontal,"学号");//有的编译器可能会出现乱码

    //设置model的编辑模式,手动提交修改
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

//    //设置view中的数据库不允许修改
//    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);




}

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

void MyWidget::on_buttonAdd_clicked()
{
    //添加空记录
    QSqlRecord record =  model->record();//获取空记录

    //获取行号
    int row = model->rowCount();
    model->insertRecord(row,record);


}

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

void MyWidget::on_buttonCancel_clicked()
{
    model->revertAll();//取消所有动作
    model->submitAll();//提交动作

}

void MyWidget::on_buttonDel_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 MyWidget::on_buttonFind_clicked()
{
    //获取内容
    QString name = ui->lineEdit->text();
    QString str = QString("name = '%1'").arg(name);

    model->setFilter(str);
    model->select();

}

 

 

使用tabview能够在不了解数据库SQL语言的基础上就可以对数据库进行操作,大大的降低了对数据库操作的难度。

 

posted @ 2019-07-12 17:14  Mr_Song_D  阅读(866)  评论(0编辑  收藏  举报