#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "adddialog.h"
#include <QMenu>
#include <QAction>
#include <QCursor>
#include <QMessageBox>
#include <QPushButton>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, dataManager(DataManager::getInstance())
{
ui->setupUi(this);
initTreeWidget();
initTableWidget();
connect(ui->addpushButton,SIGNAL(clicked()),this,SLOT(addButtonClicked()));
//connect(ui->deletepushButton, SIGNAL(clicked()), this, SLOT(deleteButtonClicked()));
connect(ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
this, SLOT(onTreeItemClicked(QTreeWidgetItem*, int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initTreeWidget()
{
ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),
this,SLOT(ContextMenuRequested(QPoint)));
ui->treeWidget->setHeaderLabel("学生管理系统");
QTreeWidgetItem *uitem=new QTreeWidgetItem();
uitem->setText(0,"北京大学");
uitem->setData(0, Qt::UserRole, 0);
ui->treeWidget->addTopLevelItem(uitem);
QTreeWidgetItem *citem=new QTreeWidgetItem();
citem->setText(0,"计算机学院");
citem->setData(0, Qt::UserRole, 1);
uitem->addChild(citem);
QTreeWidgetItem *titem=new QTreeWidgetItem();
titem->setText(0,"老师");
titem->setData(0, Qt::UserRole, 2);
citem->addChild(titem);
QTreeWidgetItem *sitem=new QTreeWidgetItem();
sitem->setText(0,"学生");
sitem->setData(0, Qt::UserRole, 3);
citem->addChild(sitem);
QTreeWidgetItem *titem1=new QTreeWidgetItem();
titem1->setText(0,"闻清砚");
titem1->setData(0, Qt::UserRole, 4);
titem->addChild(titem1);
QTreeWidgetItem *sitem1=new QTreeWidgetItem();
sitem1->setText(0,"司南钰");
sitem1->setData(0, Qt::UserRole, 5);
sitem->addChild(sitem1 );
ui->treeWidget->expandAll();
}
void MainWindow::initTableWidget()
{
QStringList header;
header<<"id"<<"name"<<"age"<<"height"<<"操作1"<<"操作2";
ui->tableWidget->setColumnCount(6);
ui->tableWidget->setHorizontalHeaderLabels(header);
QTableWidgetItem *idItem=new QTableWidgetItem;
idItem->setText("10001");
ui->tableWidget->setRowCount(1);
ui->tableWidget->setItem(0,0,idItem);
QPushButton *change=new QPushButton;
change->setText("修改");
ui->tableWidget->setCellWidget(0,4,change);
QPushButton *del=new QPushButton;
del->setText("删除");
ui->tableWidget->setCellWidget(0,5,del);
/*QStringList header;
header << "详细信息";
ui->tableWidget->setColumnCount(1);
ui->tableWidget->setHorizontalHeaderLabels(header);
ui->tableWidget->horizontalHeader()->setStretchLastSection(true);*/
}
void MainWindow::ContextMenuRequested(QPoint pos)
{
if(ui->treeWidget->itemAt(pos) == nullptr)
{
//当点击的位置没有条目
//显示菜单
QMenu menu;
QAction *addact = new QAction;
addact->setText("add University");
menu.addAction(addact);
connect(addact,SIGNAL(triggered(bool)),
this,SLOT(addUniversity()));
QAction *removeact = new QAction;
removeact->setText("remove all");
menu.addAction(removeact);
connect(removeact,SIGNAL(triggered(bool)),
this,SLOT(removeAll()));
menu.exec(QCursor::pos());
}else
{
//当点击的位置有条目
QMenu menu;
if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 0)
{
QAction *addact = new QAction;
addact->setText("add Collage");
menu.addAction(addact);
connect(addact,SIGNAL(triggered(bool)),
this,SLOT(addCollage()));
menu.exec(QCursor::pos());
}
else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 1)
{
QAction *stuaddact = new QAction;
stuaddact->setText("add student");
menu.addAction(stuaddact);
connect(stuaddact,SIGNAL(triggered(bool)),this,SLOT(addStudent()));
QAction *teaaddact = new QAction;
teaaddact->setText("add teacher");
menu.addAction(teaaddact);
connect(teaaddact,SIGNAL(triggered(bool)),this,SLOT(addTeacher()));
QAction *removeact = new QAction;
removeact->setText("remove Collage");
menu.addAction(removeact);
connect(removeact,SIGNAL(triggered(bool)),this,SLOT(removeCollage()));
menu.exec(QCursor::pos());
}
else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 2)
{
QAction *teaaddact = new QAction;
teaaddact->setText("add teachername");
menu.addAction(teaaddact);
connect(teaaddact,SIGNAL(triggered(bool)),this,SLOT(addTeacherName()));
QAction *removeact = new QAction;
removeact->setText("remove Teacher");
menu.addAction(removeact);
connect(removeact,SIGNAL(triggered(bool)),
this,SLOT(removeTeacher()));
menu.exec(QCursor::pos());
}
else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 3)
{
QAction *stuaddact = new QAction;
stuaddact->setText("add studentname");
menu.addAction(stuaddact);
connect(stuaddact,SIGNAL(triggered(bool)),this,SLOT(addStudentName()));
QAction *removeact = new QAction;
removeact->setText("remove Student");
menu.addAction(removeact);
connect(removeact,SIGNAL(triggered(bool)),
this,SLOT(removeStudent()));
menu.exec(QCursor::pos());
}
else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 4)
{
QAction *removeact = new QAction;
removeact->setText("remove TeacherName");
menu.addAction(removeact);
connect(removeact,SIGNAL(triggered(bool)),
this,SLOT(removeTeacherName()));
menu.exec(QCursor::pos());
}
else if(ui->treeWidget->currentItem()->data(0,Qt::UserRole) == 5)
{
QAction *removeact = new QAction;
removeact->setText("remove StudentName");
menu.addAction(removeact);
connect(removeact,SIGNAL(triggered(bool)),
this,SLOT(removeStudentName()));
menu.exec(QCursor::pos());
}
if (!menu.actions().isEmpty()) {
menu.exec(ui->treeWidget->mapToGlobal(pos));
}
}
}
void MainWindow::addUniversity()
{
//添加根节点
QTreeWidgetItem *uitem = new QTreeWidgetItem;
//设置隐藏属性
uitem->setData(0,Qt::UserRole,0);
uitem->setText(0,"学校");
ui->treeWidget->addTopLevelItem(uitem);
}
void MainWindow::addCollage()
{
//1.找到当前节点
QTreeWidgetItem*cur = ui->treeWidget->currentItem();
QTreeWidgetItem *child = new QTreeWidgetItem;
child->setData(0,Qt::UserRole,1);
child->setText(0,"学院");
cur->addChild(child);
cur->setExpanded(true); // 自动展开父节点
}
void MainWindow::addTeacher()
{
//1.找到当前节点
QTreeWidgetItem*cur = ui->treeWidget->currentItem();
QTreeWidgetItem *child = new QTreeWidgetItem;
child->setData(0,Qt::UserRole,2);
child->setText(0,"老师");
cur->addChild(child);
cur->setExpanded(true);
}
void MainWindow::addStudent()
{
//1.找到当前节点
QTreeWidgetItem*cur = ui->treeWidget->currentItem();
QTreeWidgetItem *child = new QTreeWidgetItem;
child->setData(0,Qt::UserRole,3);
child->setText(0,"学生");
cur->addChild(child);
cur->setExpanded(true); // 自动展开父节点
}
void MainWindow::removeAll()
{
//删除所有节点
ui->treeWidget->clear();
}
void MainWindow::removeCollage()
{
QTreeWidgetItem * paret = ui->treeWidget->currentItem()->parent();
paret->takeChild(ui->treeWidget->currentIndex().row());
}
void MainWindow::addTeacherName()
{
//1.找到当前节点
QTreeWidgetItem*cur = ui->treeWidget->currentItem();
QTreeWidgetItem *child = new QTreeWidgetItem;
child->setData(0,Qt::UserRole,4);
child->setText(0,"老师1");
cur->addChild(child);
cur->setExpanded(true);
}
void MainWindow::addStudentName()
{
//1.找到当前节点
QTreeWidgetItem*cur = ui->treeWidget->currentItem();
QTreeWidgetItem *child = new QTreeWidgetItem;
child->setData(0,Qt::UserRole,5);
child->setText(0,"学生1");
cur->addChild(child);
cur->setExpanded(true);
}
void MainWindow::removeTeacher()
{
QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent();
parent->takeChild(ui->treeWidget->currentIndex().row());
}
void MainWindow::removeStudent()
{
QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent();
parent->takeChild(ui->treeWidget->currentIndex().row());
}
void MainWindow::removeTeacherName()
{
QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent();
parent->takeChild(ui->treeWidget->currentIndex().row());
}
void MainWindow::removeStudentName()
{
QTreeWidgetItem * parent = ui->treeWidget->currentItem()->parent();
parent->takeChild(ui->treeWidget->currentIndex().row());
}
void MainWindow::addButtonClicked()
{
addDialog dialog;
dialog.exec();
}
void MainWindow::deleteButtonClicked()
{
QMessageBox::information(this, "信息确认", "确定要删除这条记录吗?");
}
void MainWindow::onTreeItemClicked(QTreeWidgetItem *item, int column)
{
Q_UNUSED(column);
if (!item) return;
int role = item->data(0, Qt::UserRole).toInt();
switch(role) {
case 0: // 学校
showUniversityInfo();
break;
case 1: // 学院
showCollegeInfo();
break;
case 4: // 老师姓名
showTeacherInfo();
break;
case 5: // 学生姓名
showStudentInfo();
break;
}
}
void MainWindow::showUniversityInfo()
{
QStringList header;
header<<"uid"<<"uname"<<"uadd";
ui->tableWidget->setColumnCount(3);
ui->tableWidget->setHorizontalHeaderLabels(header);
ui->tableWidget->setRowCount(1);
ui->tableWidget->setItem(0, 0, new QTableWidgetItem(dataManager->getUniversityUid()));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem(dataManager->getUniversityUname()));
ui->tableWidget->setItem(0, 2, new QTableWidgetItem(dataManager->getUniversityUaddr()));
/*ui->tableWidget->setItem(0, 0, new QTableWidgetItem("U10001"));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem("北京大学"));
ui->tableWidget->setItem(0, 2, new QTableWidgetItem("北京市"));
*/
/*for (int row = 0; row < 3; ++row) {
QPushButton *changeBtn = new QPushButton("修改");
QPushButton *delBtn = new QPushButton("删除");
ui->tableWidget->setCellWidget(row, 4, changeBtn);
ui->tableWidget->setCellWidget(row, 5, delBtn);
// 连接按钮信号
connect(changeBtn, &QPushButton::clicked, [this, row]() {
onModifyButtonClicked(row);
});
connect(delBtn, &QPushButton::clicked, [this, row]() {
onDeleteButtonClicked(row);
});
}
*/
}
void MainWindow::showCollegeInfo()
{
auto colleges = dataManager->getColleges();
QStringList header;
header<<"uid"<<"cname";
ui->tableWidget->setColumnCount(2);
ui->tableWidget->setHorizontalHeaderLabels(header);
/*
ui->tableWidget->setRowCount(1);
ui->tableWidget->setItem(0, 0, new QTableWidgetItem("C0001"));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem("计算机学院"));
*/
ui->tableWidget->setRowCount(colleges.size());
for (int i = 0; i < colleges.size(); ++i) {
ui->tableWidget->setItem(i, 0, new QTableWidgetItem(colleges[i].first));
ui->tableWidget->setItem(i, 1, new QTableWidgetItem(colleges[i].second));
}
}
void MainWindow::showTeacherInfo()
{
QStringList header;
header<<"tid"<<"name"<<"age"<<"height";
ui->tableWidget->setColumnCount(4);
ui->tableWidget->setHorizontalHeaderLabels(header);
ui->tableWidget->setRowCount(1);
// 第一行数据
ui->tableWidget->setItem(0, 0, new QTableWidgetItem("T10001"));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem("闻清砚"));
ui->tableWidget->setItem(0, 2, new QTableWidgetItem("30"));
ui->tableWidget->setItem(0, 3, new QTableWidgetItem("169"));
}
void MainWindow::showStudentInfo()
{
QStringList header;
header<<"sid"<<"name"<<"age"<<"height";
ui->tableWidget->setColumnCount(4);
ui->tableWidget->setHorizontalHeaderLabels(header);
ui->tableWidget->setRowCount(1);
// 第一行数据
ui->tableWidget->setItem(0, 0, new QTableWidgetItem("T10001"));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem("司南钰"));
ui->tableWidget->setItem(0, 2, new QTableWidgetItem("28"));
ui->tableWidget->setItem(0, 3, new QTableWidgetItem("169"));
}