hackware |
2013-07-14 17:45 |
很高兴看到你的回复,但是“录入教师信息”和”录入院系信息“属于不同的对话框。二者并无联系,怎么来视线信号和槽的连接呢?我尝试用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
|
|