📄 mainform.cpp
字号:
#include <QtGui>#include <QtSql>#include "employeeform.h"#include "mainform.h"MainForm::MainForm(){ createDepartmentPanel(); createEmployeePanel(); splitter = new QSplitter(Qt::Vertical); splitter->setFrameStyle(QFrame::StyledPanel); splitter->addWidget(departmentPanel); splitter->addWidget(employeePanel); addButton = new QPushButton(tr("&Add Dept.")); deleteButton = new QPushButton(tr("&Delete Dept.")); editButton = new QPushButton(tr("&Edit Employees...")); quitButton = new QPushButton(tr("&Quit")); buttonBox = new QDialogButtonBox; buttonBox->addButton(addButton, QDialogButtonBox::ActionRole); buttonBox->addButton(deleteButton, QDialogButtonBox::ActionRole); buttonBox->addButton(editButton, QDialogButtonBox::ActionRole); buttonBox->addButton(quitButton, QDialogButtonBox::AcceptRole); connect(addButton, SIGNAL(clicked()), this, SLOT(addDepartment())); connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteDepartment())); connect(editButton, SIGNAL(clicked()), this, SLOT(editEmployees())); connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(splitter); mainLayout->addWidget(buttonBox); setLayout(mainLayout); setWindowTitle(tr("Staff Manager")); departmentView->setCurrentIndex(departmentModel->index(0, 0));}void MainForm::updateEmployeeView(){ QModelIndex index = departmentView->currentIndex(); if (index.isValid()) { QSqlRecord record = departmentModel->record(index.row()); int id = record.value("id").toInt(); employeeModel->setFilter(QString("departmentid = %1").arg(id)); employeeLabel->setText(tr("E&mployees in the %1 Department") .arg(record.value("name").toString())); } else { employeeModel->setFilter("departmentid = -1"); employeeLabel->setText(tr("E&mployees")); } employeeModel->select(); employeeView->horizontalHeader()->setVisible( employeeModel->rowCount() > 0);}void MainForm::addDepartment(){ int row = departmentModel->rowCount(); departmentModel->insertRow(row); QModelIndex index = departmentModel->index(row, Department_Name); departmentView->setCurrentIndex(index); departmentView->edit(index);}void MainForm::deleteDepartment(){ QModelIndex index = departmentView->currentIndex(); if (!index.isValid()) return; QSqlDatabase::database().transaction(); QSqlRecord record = departmentModel->record(index.row()); int id = record.value(Department_Id).toInt(); int numEmployees = 0; QSqlQuery query(QString("SELECT COUNT(*) FROM employee " "WHERE departmentid = %1").arg(id)); if (query.next()) numEmployees = query.value(0).toInt(); if (numEmployees > 0) { int r = QMessageBox::warning(this, tr("Delete Department"), tr("Delete %1 and all its employees?") .arg(record.value(Department_Name).toString()), QMessageBox::Yes | QMessageBox::No); if (r == QMessageBox::No) { QSqlDatabase::database().rollback(); return; } query.exec(QString("DELETE FROM employee " "WHERE departmentid = %1").arg(id)); } departmentModel->removeRow(index.row()); departmentModel->submitAll(); QSqlDatabase::database().commit(); updateEmployeeView(); departmentView->setFocus();}void MainForm::editEmployees(){ int employeeId = -1; QModelIndex index = employeeView->currentIndex(); if (index.isValid()) { QSqlRecord record = employeeModel->record(index.row()); employeeId = record.value(Employee_Id).toInt(); } EmployeeForm form(employeeId, this); form.exec(); updateEmployeeView();}void MainForm::createDepartmentPanel(){ departmentPanel = new QWidget; departmentModel = new QSqlRelationalTableModel(this); departmentModel->setTable("department"); departmentModel->setRelation(Department_LocationId, QSqlRelation("location", "id", "name")); departmentModel->setSort(Department_Name, Qt::AscendingOrder); departmentModel->setHeaderData(Department_Name, Qt::Horizontal, tr("Dept.")); departmentModel->setHeaderData(Department_LocationId, Qt::Horizontal, tr("Location")); departmentModel->select(); departmentView = new QTableView; departmentView->setModel(departmentModel); departmentView->setItemDelegate(new QSqlRelationalDelegate(this)); departmentView->setSelectionMode( QAbstractItemView::SingleSelection); departmentView->setSelectionBehavior(QAbstractItemView::SelectRows); departmentView->setColumnHidden(Department_Id, true); departmentView->resizeColumnsToContents(); departmentView->horizontalHeader()->setStretchLastSection(true); departmentLabel = new QLabel(tr("Depar&tments")); departmentLabel->setBuddy(departmentView); connect(departmentView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateEmployeeView())); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(departmentLabel); layout->addWidget(departmentView); departmentPanel->setLayout(layout);}void MainForm::createEmployeePanel(){ employeePanel = new QWidget; employeeModel = new QSqlRelationalTableModel(this); employeeModel->setTable("employee"); employeeModel->setRelation(Employee_DepartmentId, QSqlRelation("department", "id", "name")); employeeModel->setSort(Employee_Name, Qt::AscendingOrder); employeeModel->setHeaderData(Employee_Name, Qt::Horizontal, tr("Name")); employeeModel->setHeaderData(Employee_Extension, Qt::Horizontal, tr("Ext.")); employeeModel->setHeaderData(Employee_Email, Qt::Horizontal, tr("Email")); employeeView = new QTableView; employeeView->setModel(employeeModel); employeeView->setSelectionMode(QAbstractItemView::SingleSelection); employeeView->setSelectionBehavior(QAbstractItemView::SelectRows); employeeView->setEditTriggers(QAbstractItemView::NoEditTriggers); employeeView->horizontalHeader()->setStretchLastSection(true); employeeView->setColumnHidden(Employee_Id, true); employeeView->setColumnHidden(Employee_DepartmentId, true); employeeView->setColumnHidden(Employee_StartDate, true); employeeLabel = new QLabel(tr("E&mployees")); employeeLabel->setBuddy(employeeView); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(employeeLabel); layout->addWidget(employeeView); employeePanel->setLayout(layout);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -