You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

124 lines
3.5 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "mainwindow.h"
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget *central = new QWidget(this);
setCentralWidget(central);
// 表格
tableView = new QTableView(this);
model = new QStandardItemModel(this);
model->setHorizontalHeaderLabels({"学号", "姓名", "成绩"});
tableView->setModel(model);
// 输入框
idEdit = new QLineEdit();
idEdit->setPlaceholderText("学号"); // 占位符 && 水印文字
nameEdit = new QLineEdit();
nameEdit->setPlaceholderText("姓名");
scoreEdit = new QLineEdit();
scoreEdit->setPlaceholderText("成绩");
// 按钮
addButton = new QPushButton("添加");
deleteButton = new QPushButton("删除");
// 布局
// Edit水平布局
QHBoxLayout *formLayout_Edit = new QHBoxLayout();
formLayout_Edit->addWidget(idEdit);
formLayout_Edit->addWidget(nameEdit);
formLayout_Edit->addWidget(scoreEdit); // 使各个Edit之间水平分布
// Button水平布局
QHBoxLayout *formLayout_button = new QHBoxLayout();
formLayout_button->addWidget(addButton);
formLayout_button->addWidget(deleteButton);
// 垂直布局
QVBoxLayout *mainLayout = new QVBoxLayout();
mainLayout->addWidget(tableView); // index 0垂直布局中第0个元素表格
mainLayout->addLayout(formLayout_Edit); // index 1垂直布局中第1个元素水平排列的输入框/按钮)
mainLayout->addLayout(formLayout_button); // index 2垂直布局中第2个元素 (按钮)
// 控制大小
mainLayout->setStretch(0, 1); // 表格撑满
mainLayout->setStretch(1, 0); // 输入区最小
mainLayout->setContentsMargins(10, 10, 10, 10); // 让每一个控件都与边缘保持10个像素的距离
central->setLayout(mainLayout);
tableView->setSizePolicy(
QSizePolicy::Expanding,
QSizePolicy::Expanding);
// 信号槽
connect(addButton, &QPushButton::clicked, this, &MainWindow::on_addButton_clicked);
connect(deleteButton, &QPushButton::clicked, this, &MainWindow::on_deleteButton_clicked);
// 确认窗口大小
resize(900, 600);
setMinimumSize(800, 500);
}
// 这个析构还必须得有
MainWindow::~MainWindow()
{
}
void MainWindow::on_addButton_clicked()
{
// 添加学生信息的逻辑
Student stu;
stu.id = idEdit->text();
stu.name = nameEdit->text();
stu.score = scoreEdit->text().toDouble();
// qDebug() << "id : " << stu.id
// << "name : " << stu.name
// << "score : " << stu.score;
// 判空F
if (stu.id.isEmpty() || stu.name.isEmpty())
{
QMessageBox::warning(this, "错误", "学号和姓名不能为空!");
return;
}
students.push_back(stu);
// 刷新表格
refreshTable();
// 刷新输入框内容
idEdit->clear();
nameEdit->clear();
scoreEdit->clear();
}
void MainWindow::on_deleteButton_clicked()
{
int row = tableView->currentIndex().row();
if (row < 0)
return;
students.remove(row);
// 刷新表格
refreshTable();
}
void MainWindow::refreshTable()
{
model->removeRows(0, model->rowCount());
for (const Student &stu : students)
{
QList<QStandardItem *> row;
row << new QStandardItem(stu.id)
<< new QStandardItem(stu.name)
<< new QStandardItem(QString::number(stu.score));
model->appendRow(row);
}
}