小白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,"修改失败","请检查修改数据!");
}
}
总结
找了好久的方法最后几行代码就解决了。。不过还有很多问题没处理,只是能跑,不管了,先能用再说吧~