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

根据上一次的讨论,这次我们来研究一下QSqlTableModel的添加方法。

首先新建一个Qt界面类

Qt使用QSqlTableModel界面显示用法(二、添加功能)_第1张图片 Qt使用QSqlTableModel界面显示用法(二、添加功能)_第2张图片

用dialog界面,因为我们需要dialog的exec()接口。

然后稍微设计一下界面窗口

Qt使用QSqlTableModel界面显示用法(二、添加功能)_第3张图片

这个界面就是添加的数据了,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使用QSqlTableModel界面显示用法(二、添加功能)_第4张图片

做到这个地步大家会发现,在打开界面后直接关闭,仍然有空数据插入到数据库中。那是因为在执行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/

~~~
继续下一章:删除功能

你可能感兴趣的:(Qt,自学之路)