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语言的基础上就可以对数据库进行操作,大大的降低了对数据库操作的难度。