Qt|Qt使用QSqlTableModel界面显示用法(二、添加功能)

根据上一次的讨论,这次我们来研究一下QSqlTableModel的添加方法。
首先新建一个Qt界面类
Qt|Qt使用QSqlTableModel界面显示用法(二、添加功能)
文章图片
Qt|Qt使用QSqlTableModel界面显示用法(二、添加功能)
文章图片
【Qt|Qt使用QSqlTableModel界面显示用法(二、添加功能)】用dialog界面,因为我们需要dialog的exec()接口。
然后稍微设计一下界面窗口
Qt|Qt使用QSqlTableModel界面显示用法(二、添加功能)
文章图片
这个界面就是添加的数据了,id是我们设定的主键值,随数据自动增长,所以不需要手动输入。
既然是添加操作,我们肯定要添加槽函数,在主ui下的添加按钮右击选择“转到槽”,一般选择默认的click()函数即可。
在.cpp函数下会显示

void MainWindow::on_pushButton_clicked() {}

在此输入添加代码即可
void MainWindow::on_pushButton_clicked() { AddRecord * add = new AddRecord(this); //新建界面对象 add->exec(); //显示界面,且进程停止在此,除add界面外无法操作其它界面QString *str = add->str; //以下就是插入函数的基本语句了 QSqlTableModel * model = new QSqlTableModel(this,db); model->setTable("EXAMPLE"); int row = model->rowCount(); model->insertRow(row); model->setData(model->index(row,1),str[0]); model->setData(model->index(row,2),str[0]); model->submitAll(); //提交插入的数据 ui->tableView->setModel(model); //设置model模型 model->select(); //显示 }

以上语句相当于插入数据语句
insert into EXAMPLE (name,age,city) values ('张三',22'南京')

如图!
Qt|Qt使用QSqlTableModel界面显示用法(二、添加功能)
文章图片
做到这个地步大家会发现,在打开界面后直接关闭,仍然有空数据插入到数据库中。那是因为在执行exec后,无论怎样关闭,都会继续执行插入的后续语句,所以我们要在exec()后添加用户是否按下完成按钮的判断。
在addrecord.h中添加语句
public: bool isClicked = false;

在addrecord.cpp中void AddRecord::on_pushButton_clicked()添加
isClicked = true;

原插入函数修改为
void MainWindow::on_pushButton_clicked() { AddRecord * add = new AddRecord(this); add->exec(); if(!add->isClicked) return; QString *str = add->str; QSqlTableModel * model = new QSqlTableModel(this,db); model->setTable("EXAMPLE"); int row = model->rowCount(); model->insertRow(row); model->setData(model->index(row,1),str[0]); model->setData(model->index(row,2),str[1].toInt()); model->setData(model->index(row,3),str[2]); model->submitAll(); //提交插入的数据 ui->tableView->setModel(model); //设置model模型 model->select(); //显示 }

这个时候只要不点击完成按钮就不会有数据插入了!






!!!在此申明一下为什么用exec() 接口!!!
比如说insertDialog使用exec显示界面,程序会进入循环,等待你对执行exec这个insertDialog的操作。当你关闭insertDialog类窗口时,程序会继续执行接下来的代码,所以当你在exec循环里时,原窗口会拒绝一切操作。
而如果使用show的话,你会发现对话框会很快自动关闭,因为,show不会进入循环,它执行完后会继续执行下面语句,而你什么都没输入,完全不顾及你的感受!
具体参考大佬解释:https://www.devbean.net/2012/09/qt-study-road-2-dialogs-intro/
~~~
继续下一章:删除功能

    推荐阅读