⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainform.cpp

📁 QT4 gui programming的随书光盘
💻 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 + -