小白QT tableView实时修改同步到QSqlTableModel MODEL 即时修改数据库

小白QT tableView实时修改同步到QSqlTableModel MODEL 即时修改数据库

tableView实时修改数据库

代码如下(示例):

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QString name,QWidget *parent = nullptr);
    ~MainWindow();
   
signals:
    //重载dataChanged 格式就是这个,参数不对就没得信号了
    void dataChanged(QModelIndex,QModelIndex);
private slots:
	//槽函数
    void ChangeData(QModelIndex);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

 #include "mainwindow.h"
#include "ui_mainwindow.h"



MainWindow::MainWindow(QString name,QWidget *parent) :
    user(name),
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
   
    //重载datachange信号 发送QModelIndex类参数,传递给ChangeData
    connect(model,SIGNAL(dataChanged(QModelIndex,QModelIndex)),this,SLOT(ChangeData(QModelIndex)));
}

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


void MainWindow::ChangeData(QModelIndex x)
{
    bool y=model->setData(model->index(x.row(),x.column()),x.data()); //x.data()返回QVariantl类型数据 QVariant内置支持所有QMetaType::Type里声明的类型如:int,QString,QFont,QColor等,甚至QList,QMap<QString, QVariant>等组成的任意复杂类型。
   
    if(y){                       
    model->submitAll();
    }
    else {
        model->blockSignals(true);//阻塞datachange信号发送,没这句about会弹两次
        model->revertAll();
        QMessageBox::about(this,"修改失败","请检查修改数据!");
    }
}






总结

找了好久的方法最后几行代码就解决了。。不过还有很多问题没处理,只是能跑,不管了,先能用再说吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值