很高兴看到你的回复,但是“录入教师信息”和”录入院系信息“属于不同的对话框。二者并无联系,怎么来视线信号和槽的连接呢?我尝试用eventFilter(),收到部分效果但有bug。部分代码如下:
//insert_college
#ifndef ADMINISTRATOR_INSERTCOLLEGEDIALOG_H
#define ADMINISTRATOR_INSERTCOLLEGEDIALOG_H
#include "ui_administrator_insertcollegedialog.h"
#include "departmentsfileitem.h"
#include <string>
#include <QFile>
#include <QDialog>
#include <QMessageBox>
class InsertCollegeDialog:public QDialog,Ui::InsertCollegeDialog
{
Q_OBJECT
public:
InsertCollegeDialog(QWidget *parent = 0)
:QDialog(parent)
{
setupUi(this);
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
loadDataToTable();
connect(submitButton,SIGNAL(clicked()),this,SLOT(insertData()));
}
private slots:
void insertData()
{
if(check(idEdit->text().trimmed().toStdString(),nameEdit->text().trimmed().toStdString()))
{
DepartmentsFileItem item(idEdit->text().trimmed().toInt(),nameEdit->text().trimmed().toStdString().c_str());
if(!item.exist())
{
DepartmentsFileItem::insertItem(idEdit->text().trimmed().toInt(),nameEdit->text().trimmed().toStdString().c_str());
loadDataToTable();
}
else
QMessageBox::warning(this,"警告","该院系已存在!");
//提示信息
}
}
private:
bool check(string id,string name)
{
//一系列数据正确性检查
if(id.empty())
{
QMessageBox::warning(this,"警告","院系编号不能为空!");
return false;
}
if(name.empty())
{
QMessageBox::warning(this,"警告","院系名称不能为空!");
return false;
}
return true;
}
void loadDataToTable()
{
QFile file("departments.dat");
tableWidget->setRowCount(file.size()/sizeof(DepartmentsFileItem));
fstream stream;
stream.open("departments.dat",ios::in|ios::binary);
DepartmentsFileItem item;
int i = 0;
while(stream.read(reinterpret_cast<char *>(&item),sizeof(DepartmentsFileItem)))
{
for(int j = 0; j < 3; j++)
{
QTableWidgetItem *tabItem = new QTableWidgetItem(item.getItem(j));
tabItem->setTextAlignment(Qt::AlignCenter);
tableWidget->setItem(i,j,tabItem);
}
i++;
}
}
};
#endif // ADMINISTRATOR_INSERTCOLLEGEDIALOG_H
//insert_teacher
#ifndef ADMINISTRATOR_INSERTTEACHERDIALOG_H
#define ADMINISTRATOR_INSERTTEACHERDIALOG_H
#include <QDialog>
#include "ui_administrator_insertteacherdialog.h"
#include "departmentsfileitem.h"
#include <QMessageBox>
#include <string>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QFile>
#include <QString>
#include <fstream>
#include "teacherfileitem.h"
using namespace std;
class InsertTeacherDialog:public QDialog,public Ui::InsertTeacherDialog
{
Q_OBJECT
public:
InsertTeacherDialog(QWidget *parent = 0)
:QDialog(parent)
{
setupUi(this);
//获取学院信息
updateCollege();
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
loadDataToTable();
connect(submitButtton,SIGNAL(clicked()),this,SLOT(insertData()));
}
private slots:
void insertData()
{
if(check(idEdit->text().trimmed().toStdString(),nameEdit->text().trimmed().toStdString()))
{
//获取院系编号
Item **array = new Item*[MAX_NUMBER_OF_ITEMS_TO_DISPLAY];
DepartmentsFileItem::find(1,collegeComboBox->currentText().toStdString().c_str(),array);
int collegeId = static_cast<DepartmentsFileItem *>(array[0])->getId();
//插入新的记录
Teacherfileitem item(idEdit->text().toInt(),"","",0,"","","","");
if(!item.exist())
{
Teacherfileitem::insertItem(idEdit->text().toInt(),nameEdit->text().trimmed().toStdString().c_str(),sexComboBox->currentText().toStdString().c_str(),collegeId,dateEdit->text().toStdString().c_str(),politicalComboBox->currentText().toStdString().c_str(),positionComboBox->currentText().toStdString().c_str(),idEdit->text().trimmed().right(6).toStdString().c_str());
loadDataToTable();
}
else
QMessageBox::warning(this,"警告","该用户已存在!");
}
}
private:
bool check(string id,string name)
{
if(id.empty())
{
QMessageBox::warning(this,"警告","工号不能为空!");
return false;
}
if(name.empty())
{
QMessageBox::warning(this,"警告","教师姓名不能为空!");
return false;
}
if(!collegeComboBox->isEnabled())
{
QMessageBox::warning(this,"警告","请录入学院信息!");
return false;
}
return true;
}
void loadDataToTable()
{
QFile file("teacher.dat");
tableWidget->setRowCount(file.size()/sizeof(Teacherfileitem));
fstream stream;
stream.open("teacher.dat",ios::in|ios::binary);
Teacherfileitem item;
int i = 0;
while(stream.read(reinterpret_cast<char *>(&item),sizeof(Teacherfileitem)))
{
for(int j = 0; j < 7; j++)
{
QTableWidgetItem *tabItem = new QTableWidgetItem(item.getItem(j));
tabItem->setTextAlignment(Qt::AlignCenter);
if(j == 3)
{
//院系
int collegeId = item.getDepartment();
Item **array = new Item*[MAX_NUMBER_OF_ITEMS_TO_DISPLAY];
DepartmentsFileItem::find(0,QString::number(collegeId).toStdString().c_str(),array);
DepartmentsFileItem *newItem1 = static_cast<DepartmentsFileItem *>(array[0]);
tabItem->setText(newItem1->getName());
}
tableWidget->setItem(i,j,tabItem);
}
i++;
}
}
void updateCollege()
{
collegeComboBox->clear();
fstream stream;
stream.open("departments.dat",ios::in|ios::binary);
DepartmentsFileItem item;
int numberOfItems = 0;
while(stream.read(reinterpret_cast<char *>(&item),sizeof(DepartmentsFileItem)))
{
collegeComboBox->addItem(item.getName());
numberOfItems++;
}
if(numberOfItems == 0)
{
collegeComboBox->addItem("空");
collegeComboBox->setEnabled(false);
}
else
collegeComboBox->setEnabled(true);
}
};
#endif // ADMINISTRATOR_INSERTTEACHERDIALOG_H