QT --Qtableview 与Qsql 应用四 QSqlTableModel 不使用Sql语句操作数据库

简言:Qt使用 QSqlTableModel也可以操作简单的表,而不再担心SQL语句是否出错,例子如下:

.h

    //第二种连接办法
public:
    QSqlTableModel *model;
    void init2();

private slots:
    //第二种连接办法
    void ModelSelect();
    void ModelDel();
    void ModelEdit();

.cpp

void MainWindow::init2()
{
    createDb();
    connect(ui->pushButtonModelSelect,SIGNAL(clicked(bool)),this,SLOT(ModelSelect()));
    connect(ui->pushButtonModelDel,SIGNAL(clicked(bool)),this,SLOT(ModelDel()));
    connect(ui->pushbuttonModelEdit,SIGNAL(clicked(bool)),this,SLOT(ModelEdit()));
}

void MainWindow::ModelSelect()
{
    model = new QSqlTableModel(this);
    model->setTable("person");
    //设置保存策略
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);

    //查询整张表
    model->select();
    ui->tableView->setModel(model);
}



void MainWindow::ModelDel()
{
    //删除功能
    int ret;
    int curRow = ui->tableView->currentIndex().row();
    model->removeRow(curRow);
    ret = QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
    if(ret == QMessageBox::No)
    {
        model->revertAll();
    }
    else
    {
        model->submitAll();
    }
}

void MainWindow::ModelEdit()
{
    model->database().transaction();
    if(model->submitAll())
        model->database().commit();
    else
    {
        model->database().rollback();
        QMessageBox::warning(this,"tableModel","数据库错误:"+tr("%1").arg(model->lastError().text()));
    }

}

结果:可以完美实现表的select update del

你可能感兴趣的:(Qt学习之道)