Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt在向数据库添加数据后刷新抽象项模型_C++_Qt_Qt5 - Fatal编程技术网

C++ Qt在向数据库添加数据后刷新抽象项模型

C++ Qt在向数据库添加数据后刷新抽象项模型,c++,qt,qt5,C++,Qt,Qt5,如何在向数据库添加数据后重新加载qabstract项模型。所以我想要的是,当我设法向数据库添加数据时,QabstracteModel正在刷新或重新加载新数据。但在这种情况下,我成功地将数据添加到数据库中,树视图没有更新,所以要更新这些数据,我必须关闭并再次打开小部件。请帮助我在teachersmodel.cpp文件的第行(//将数据添加到数据库后刷新proxymodel)上写什么? 教师模型.cpp: #include <QtWidgets> #include <QDebug&

如何在向数据库添加数据后重新加载qabstract项模型。所以我想要的是,当我设法向数据库添加数据时,QabstracteModel正在刷新或重新加载新数据。但在这种情况下,我成功地将数据添加到数据库中,树视图没有更新,所以要更新这些数据,我必须关闭并再次打开小部件。请帮助我在teachersmodel.cpp文件的第行(//将数据添加到数据库后刷新proxymodel)上写什么?
教师模型.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);
骗局