C++ Qt在向数据库添加数据后刷新抽象项模型
如何在向数据库添加数据后重新加载qabstract项模型。所以我想要的是,当我设法向数据库添加数据时,QabstracteModel正在刷新或重新加载新数据。但在这种情况下,我成功地将数据添加到数据库中,树视图没有更新,所以要更新这些数据,我必须关闭并再次打开小部件。请帮助我在teachersmodel.cpp文件的第行(//将数据添加到数据库后刷新proxymodel)上写什么?C++ Qt在向数据库添加数据后刷新抽象项模型,c++,qt,qt5,C++,Qt,Qt5,如何在向数据库添加数据后重新加载qabstract项模型。所以我想要的是,当我设法向数据库添加数据时,QabstracteModel正在刷新或重新加载新数据。但在这种情况下,我成功地将数据添加到数据库中,树视图没有更新,所以要更新这些数据,我必须关闭并再次打开小部件。请帮助我在teachersmodel.cpp文件的第行(//将数据添加到数据库后刷新proxymodel)上写什么? 教师模型.cpp: #include <QtWidgets> #include <QDebug&
教师模型.cpp:
#include <QtWidgets>
#include <QDebug>
#include <iostream>
#include "mainwindow/teacherspage/teachersmodel.h"
using namespace std;
using namespace mongo;
TeachersModel::TeachersModel()
{
int countRow = 0;
}
QDate TeachersModel::DateOfBirth(const BSONElement &datebirth)
{
return QDate(QDateTime::fromTime_t(datebirth.date()/1000).date());
}
void TeachersModel::AddTeacher(QAbstractItemModel* model,
const QString &induk_no,
const QString &name,
const QString &phone,
const QDate &datebirth,
const QString &sex,
const QString &certificate,
const QString &position,
const QString &teach,
const QString &fieldofstudy,
const QString &id)
{
model->insertRow(0);
model->setData(model->index(0, 0), induk_no);
model->setData(model->index(0, 1), name);
model->setData(model->index(0, 2), phone);
model->setData(model->index(0, 3), datebirth);
model->setData(model->index(0, 4), sex);
model->setData(model->index(0, 5), certificate);
model->setData(model->index(0, 6), position);
model->setData(model->index(0, 7), teach);
model->setData(model->index(0, 8), fieldofstudy);
model->setData(model->index(0, 9), id);
}
QAbstractItemModel* TeachersModel::CreateTeacherModel(QObject* parent)
{
QStandardItemModel *model = new QStandardItemModel(0, 10, parent);
model->setHeaderData(0, Qt::Horizontal, QObject::tr("No Induk"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Nama"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("Telepon"));
model->setHeaderData(3, Qt::Horizontal, QObject::tr("Tanggal Lahir"));
model->setHeaderData(4, Qt::Horizontal, QObject::tr("Jenis Kelamin"));
model->setHeaderData(5, Qt::Horizontal, QObject::tr("Ijazah"));
model->setHeaderData(6, Qt::Horizontal, QObject::tr("Jabatan"));
model->setHeaderData(7, Qt::Horizontal, QObject::tr("Mengajar"));
model->setHeaderData(8, Qt::Horizontal, QObject::tr("Bidang Studi"));
model->setHeaderData(9, Qt::Horizontal, QObject::tr("Id"));
#ifdef Q_OS_WIN
client::initialize();
#endif // Q_OS_WIN
c.connect("localhost");
unique_ptr<DBClientCursor> cursor = c.query("sia.teachers", BSONObj());
while (cursor->more()) {
BSONObj p = cursor->next();
AddTeacher(model, p.getStringField("induk_no"),
p.getStringField("name"),
p.getStringField("phone"),
DateOfBirth(p.getField("datebirth")),
p.getStringField("sex"),
p.getStringField("certificate"),
p.getStringField("position"),
p.getStringField("teach"),
p.getStringField("fieldofstudy"),
QString::fromStdString(p["_id"].OID().toString()));
}
return model;
}
void TeachersModel::SaveTeacher(const QString &induk_no,
const QString &name,
const QString &phone,
const QDate &datebirth,
const QString &sex,
const QString &certificate,
const QString &position,
const QString &teach,
const QString &fieldofstudy)
{
#ifdef Q_OS_WIN
client::initialize();
#endif // Q_OS_WIN
c.connect("localhost");
BSONObjBuilder b;
b.append("induk_no", induk_no.toStdString());
b.append("name", name.toStdString());
b.append("phone", phone.toStdString());
b.appendDate("datebirth", QDateTime(datebirth).toMSecsSinceEpoch());
b.append("sex", sex.toStdString());
b.append("certificate", certificate.toStdString());
b.append("position", position.toStdString());
b.append("teach", teach.toStdString());
b.append("fieldofstudy", fieldofstudy.toStdString());
BSONObj p = b.obj();
c.insert("sia.teachers", p);
// refresh proxymodel after add data to database
}
TeachersModel::~TeachersModel() {}
#include <iostream>
#include <exception>
#include "mainwindow/teacherspage/teachers.h"
#include "mainwindow/teacherspage/crud_teacher.h"
using namespace std;
Teachers::Teachers(QWidget* parent) : QWidget(parent)
{
proxyModel_ = new QSortFilterProxyModel;
proxyView_ = new QTreeView;
proxyView_->setRootIsDecorated(false);
proxyView_->setAlternatingRowColors(true);
proxyView_->setModel(proxyModel_);
proxyView_->setSortingEnabled(true);
proxyView_->sortByColumn(1, Qt::AscendingOrder);
filterPatternLineEdit_ = new QLineEdit;
filterPatternLabel_ = new QLabel("Cari data:");
filterColumnComboBox_ = new QComboBox;
filterColumnComboBox_->addItem("No Induk");
filterColumnComboBox_->addItem("Nama");
filterColumnComboBox_->setFixedWidth(200);
addButton_ = new QPushButton("Tambah");
addButton_->setFixedWidth(100);
editButton_ = new QPushButton("Edit");
editButton_->setFixedWidth(100);
deleteButton_ = new QPushButton("Hapus");
deleteButton_->setFixedWidth(100);
connect(filterPatternLineEdit_, SIGNAL(textChanged(QString)),
this, SLOT(filterRegExpChanged()));
connect(filterColumnComboBox_, SIGNAL(currentIndexChanged(int)),
this, SLOT(filterColumnChanged()));
connect(addButton_, SIGNAL(clicked()), this, SLOT(addTeacher()));
QVBoxLayout *mainLayout = new QVBoxLayout;
QHBoxLayout *filterLayout = new QHBoxLayout;
QHBoxLayout *sourceLayout = new QHBoxLayout;
filterLayout->addWidget(filterPatternLabel_, 1);
filterLayout->addWidget(filterPatternLineEdit_, 2);
filterLayout->addWidget(filterColumnComboBox_, 3);
filterLayout->addWidget(addButton_, 4);
filterLayout->addWidget(editButton_, 5);
filterLayout->addWidget(deleteButton_, 6);
sourceLayout->addWidget(proxyView_);
mainLayout->addLayout(filterLayout);
mainLayout->addLayout(sourceLayout);
setLayout(mainLayout);
teachersModel = new TeachersModel;
try {
SetSourceModel(teachersModel->CreateTeacherModel(this));
} catch (exception& e) {
qDebug() << "Caught " << e.what();
QMessageBox::critical(this, "Error", e.what());
}
}
void Teachers::filterRegExpChanged()
{
QRegExp regExp(filterPatternLineEdit_->text(), Qt::CaseInsensitive, QRegExp::RegExp);
proxyModel_->setFilterRegExp(regExp);
}
void Teachers::filterColumnChanged()
{
proxyModel_->setFilterKeyColumn(filterColumnComboBox_->currentIndex());
}
void Teachers::addTeacher()
{
CrudTeacher *crudTeacher = new CrudTeacher(this);
crudTeacher->show();
}
void Teachers::SetSourceModel(QAbstractItemModel* model)
{
proxyModel_->setSourceModel(model);
proxyView_->setColumnHidden(9, true);
}
Teachers::~Teachers() {}
#包括
#包括
#包括
#包括“主窗口/teacherspage/teachersmodel.h”
使用名称空间std;
使用名称空间mongo;
教师模型::教师模型()
{
int countRow=0;
}
QDate Teachers模型::出生日期(常量b元素和日期出生)
{
返回QDate(QDateTime::fromTime_t(datebirth.date()/1000.date());
}
void teachers模型::AddTeacher(QAbstractItemModel*模型,
康斯特林和印度河号,
常量QString和名称,
const QString和phone,
const QDate和datebirth,
const QString&sex,
const QString和证书,
常量Q字符串和位置,
const QString&teach,
const QString和Fieldof Study,
常量(字符串和id)
{
模型->插入行(0);
模型->设置数据(模型->索引(0,0),工业编号);
模型->设置数据(模型->索引(0,1),名称);
模型->设置数据(模型->索引(0,2),电话);
模型->设置数据(模型->索引(0,3),日期出生);
模型->设置数据(模型->索引(0,4),性别);
模型->设置数据(模型->索引(0,5),证书);
模型->设置数据(模型->索引(0,6),位置);
模型->设置数据(模型->索引(0,7),设定);
模型->设置数据(模型->索引(0,8),研究领域);
模型->设置数据(模型->索引(0,9),id);
}
QAbstractItemModel*教师模型::CreateTacherModel(QObject*父)
{
QStandardItemModel*model=新的QStandardItemModel(0,10,父级);
model->setHeaderData(0,Qt::水平,QObject::tr(“无工业”));
model->setHeaderData(1,Qt::Horizontal,QObject::tr(“Nama”));
model->setHeaderData(2,Qt::Horizontal,QObject::tr(“Telepon”);
model->setHeaderData(3,Qt::水平,QObject::tr(“Tanggal-Lahir”);
model->setHeaderData(4,Qt::水平,QObject::tr(“Jenis Kelamin”);
model->setHeaderData(5,Qt::Horizontal,QObject::tr(“Ijazah”);
model->setHeaderData(6,Qt::Horizontal,QObject::tr(“Jabatan”));
model->setHeaderData(7,Qt::Horizontal,QObject::tr(“Mengajar”);
model->setHeaderData(8,Qt::水平,QObject::tr(“Bidang Studi”);
model->setHeaderData(9,Qt::Horizontal,QObject::tr(“Id”);
#如果你赢了
客户端::初始化();
#endif//Q_OS_WIN
c、 连接(“本地主机”);
unique_ptr cursor=c.query(“sia.teachers”,BSONObj());
同时(光标->更多(){
BSONObj p=cursor->next();
AddTeacher(型号,p.getStringField(“工业号”),
p、 getStringField(“名称”),
p、 getStringField(“电话”),
出生日期(p.getField(“datebirth”),
p、 getStringField(“性别”),
p、 getStringField(“证书”),
p、 getStringField(“位置”),
p、 getStringField(“教学”),
p、 getStringField(“研究领域”),
QString::fromStdString(p[“_id”].OID().toString());
}
收益模型;
}
void TeachersModel::SaveTeacher(const QString&induk_no,
常量QString和名称,
const QString和phone,
const QDate和datebirth,
const QString&sex,
const QString和证书,
常量Q字符串和位置,
const QString&teach,
const QString和Fieldof Study)
{
#如果你赢了
客户端::初始化();
#endif//Q_OS_WIN
c、 连接(“本地主机”);
BSONOBJB;
b、 附加(“induk_no”,induk_no.toStdString());
b、 追加(“name”,name.toStdString());
b、 追加(“phone”,phone.toStdString());
b、 appendDate(“datebirth”,QDateTime(datebirth).toMSecsSinceEpoch());
b、 追加(“sex”,sex.toStdString());
b、 追加(“certificate”,certificate.toStdString());
b、 追加(“position”,position.toStdString());
b、 追加(“teach”,teach.toStdString());
b、 追加(“fieldofstudy”,fieldofstudy.toStdString());
BSONObj p=b.obj();
c、 插入(“sia.teachers”,p);
//将数据添加到数据库后刷新proxymodel
}
TeachersModel::~TeachersModel(){}
这是调用teachersmodel.cpp的代码:教师。cpp:
#include <QtWidgets>
#include <QDebug>
#include <iostream>
#include "mainwindow/teacherspage/teachersmodel.h"
using namespace std;
using namespace mongo;
TeachersModel::TeachersModel()
{
int countRow = 0;
}
QDate TeachersModel::DateOfBirth(const BSONElement &datebirth)
{
return QDate(QDateTime::fromTime_t(datebirth.date()/1000).date());
}
void TeachersModel::AddTeacher(QAbstractItemModel* model,
const QString &induk_no,
const QString &name,
const QString &phone,
const QDate &datebirth,
const QString &sex,
const QString &certificate,
const QString &position,
const QString &teach,
const QString &fieldofstudy,
const QString &id)
{
model->insertRow(0);
model->setData(model->index(0, 0), induk_no);
model->setData(model->index(0, 1), name);
model->setData(model->index(0, 2), phone);
model->setData(model->index(0, 3), datebirth);
model->setData(model->index(0, 4), sex);
model->setData(model->index(0, 5), certificate);
model->setData(model->index(0, 6), position);
model->setData(model->index(0, 7), teach);
model->setData(model->index(0, 8), fieldofstudy);
model->setData(model->index(0, 9), id);
}
QAbstractItemModel* TeachersModel::CreateTeacherModel(QObject* parent)
{
QStandardItemModel *model = new QStandardItemModel(0, 10, parent);
model->setHeaderData(0, Qt::Horizontal, QObject::tr("No Induk"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Nama"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("Telepon"));
model->setHeaderData(3, Qt::Horizontal, QObject::tr("Tanggal Lahir"));
model->setHeaderData(4, Qt::Horizontal, QObject::tr("Jenis Kelamin"));
model->setHeaderData(5, Qt::Horizontal, QObject::tr("Ijazah"));
model->setHeaderData(6, Qt::Horizontal, QObject::tr("Jabatan"));
model->setHeaderData(7, Qt::Horizontal, QObject::tr("Mengajar"));
model->setHeaderData(8, Qt::Horizontal, QObject::tr("Bidang Studi"));
model->setHeaderData(9, Qt::Horizontal, QObject::tr("Id"));
#ifdef Q_OS_WIN
client::initialize();
#endif // Q_OS_WIN
c.connect("localhost");
unique_ptr<DBClientCursor> cursor = c.query("sia.teachers", BSONObj());
while (cursor->more()) {
BSONObj p = cursor->next();
AddTeacher(model, p.getStringField("induk_no"),
p.getStringField("name"),
p.getStringField("phone"),
DateOfBirth(p.getField("datebirth")),
p.getStringField("sex"),
p.getStringField("certificate"),
p.getStringField("position"),
p.getStringField("teach"),
p.getStringField("fieldofstudy"),
QString::fromStdString(p["_id"].OID().toString()));
}
return model;
}
void TeachersModel::SaveTeacher(const QString &induk_no,
const QString &name,
const QString &phone,
const QDate &datebirth,
const QString &sex,
const QString &certificate,
const QString &position,
const QString &teach,
const QString &fieldofstudy)
{
#ifdef Q_OS_WIN
client::initialize();
#endif // Q_OS_WIN
c.connect("localhost");
BSONObjBuilder b;
b.append("induk_no", induk_no.toStdString());
b.append("name", name.toStdString());
b.append("phone", phone.toStdString());
b.appendDate("datebirth", QDateTime(datebirth).toMSecsSinceEpoch());
b.append("sex", sex.toStdString());
b.append("certificate", certificate.toStdString());
b.append("position", position.toStdString());
b.append("teach", teach.toStdString());
b.append("fieldofstudy", fieldofstudy.toStdString());
BSONObj p = b.obj();
c.insert("sia.teachers", p);
// refresh proxymodel after add data to database
}
TeachersModel::~TeachersModel() {}
#include <iostream>
#include <exception>
#include "mainwindow/teacherspage/teachers.h"
#include "mainwindow/teacherspage/crud_teacher.h"
using namespace std;
Teachers::Teachers(QWidget* parent) : QWidget(parent)
{
proxyModel_ = new QSortFilterProxyModel;
proxyView_ = new QTreeView;
proxyView_->setRootIsDecorated(false);
proxyView_->setAlternatingRowColors(true);
proxyView_->setModel(proxyModel_);
proxyView_->setSortingEnabled(true);
proxyView_->sortByColumn(1, Qt::AscendingOrder);
filterPatternLineEdit_ = new QLineEdit;
filterPatternLabel_ = new QLabel("Cari data:");
filterColumnComboBox_ = new QComboBox;
filterColumnComboBox_->addItem("No Induk");
filterColumnComboBox_->addItem("Nama");
filterColumnComboBox_->setFixedWidth(200);
addButton_ = new QPushButton("Tambah");
addButton_->setFixedWidth(100);
editButton_ = new QPushButton("Edit");
editButton_->setFixedWidth(100);
deleteButton_ = new QPushButton("Hapus");
deleteButton_->setFixedWidth(100);
connect(filterPatternLineEdit_, SIGNAL(textChanged(QString)),
this, SLOT(filterRegExpChanged()));
connect(filterColumnComboBox_, SIGNAL(currentIndexChanged(int)),
this, SLOT(filterColumnChanged()));
connect(addButton_, SIGNAL(clicked()), this, SLOT(addTeacher()));
QVBoxLayout *mainLayout = new QVBoxLayout;
QHBoxLayout *filterLayout = new QHBoxLayout;
QHBoxLayout *sourceLayout = new QHBoxLayout;
filterLayout->addWidget(filterPatternLabel_, 1);
filterLayout->addWidget(filterPatternLineEdit_, 2);
filterLayout->addWidget(filterColumnComboBox_, 3);
filterLayout->addWidget(addButton_, 4);
filterLayout->addWidget(editButton_, 5);
filterLayout->addWidget(deleteButton_, 6);
sourceLayout->addWidget(proxyView_);
mainLayout->addLayout(filterLayout);
mainLayout->addLayout(sourceLayout);
setLayout(mainLayout);
teachersModel = new TeachersModel;
try {
SetSourceModel(teachersModel->CreateTeacherModel(this));
} catch (exception& e) {
qDebug() << "Caught " << e.what();
QMessageBox::critical(this, "Error", e.what());
}
}
void Teachers::filterRegExpChanged()
{
QRegExp regExp(filterPatternLineEdit_->text(), Qt::CaseInsensitive, QRegExp::RegExp);
proxyModel_->setFilterRegExp(regExp);
}
void Teachers::filterColumnChanged()
{
proxyModel_->setFilterKeyColumn(filterColumnComboBox_->currentIndex());
}
void Teachers::addTeacher()
{
CrudTeacher *crudTeacher = new CrudTeacher(this);
crudTeacher->show();
}
void Teachers::SetSourceModel(QAbstractItemModel* model)
{
proxyModel_->setSourceModel(model);
proxyView_->setColumnHidden(9, true);
}
Teachers::~Teachers() {}
#包括
#包括
#包括“主窗口/teacherspage/teachers.h”
#包括“主窗口/teacherspage/crud_teacher.h”
使用名称空间std;
教师::教师(QWidget*家长):QWidget(家长)
{
proxyModel=新的QSortFilterProxyModel;
proxyView \=新的QTreeView;
proxyView->setRootIsDecorated(假);
proxyView->SetAlternatingRowColor(真);
proxyView->setModel(proxyModel);
proxyView->setSortingEnabled(真);
proxyView->sortByColumn(1,Qt::AscendingOrder);
filterPatternLineEdit=新QLineEdit;
filterPatternLabel=新QLabel(“Cari数据:”);
filterColumnComboBox=新的QComboBox;
过滤柱组合框->添加项(“无行业”);
filterColumnComboBox->addItem(“Nama”);
过滤器列组合框->设置固定宽度(200);
addButton=新的QPushButton(“Tambah”);
添加按钮->设置固定宽度(100);
编辑按钮=新的QPushButton(“编辑”);
编辑按钮->设置固定宽度(100);
deleteButton=新的QPushButton(“Hapus”);
删除按钮->设置固定宽度(100);
骗局