update 改用纯代码实现控件布局

main
wang-qin928 3 weeks ago
parent 7531ae1e02
commit 77dc115332

1
.gitignore vendored

@ -0,0 +1 @@
*.pro.user

@ -23,8 +23,6 @@ HEADERS += \
mainwindow.h \
student.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin

@ -1,46 +1,105 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
: QMainWindow(parent)
{
ui->setupUi(this);
QWidget *central = new QWidget(this);
setCentralWidget(central);
// 表格
tableView = new QTableView(this);
model = new QStandardItemModel(this);
model->setHorizontalHeaderLabels({"学号", "姓名", "成绩"});
ui->tableView->setModel(model);
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()
{
delete ui;
}
void MainWindow::on_addButton_clicked()
{
// 添加学生信息的逻辑
Student stu;
stu.id = ui -> idEdit->text();
stu.name = ui -> nameEdit->text();
stu.score = ui -> scoreEdit->text().toDouble();
// 判空
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();
// 刷新输入框内容
ui->idEdit->clear();
ui->nameEdit->clear();
ui->scoreEdit->clear();
idEdit->clear();
nameEdit->clear();
scoreEdit->clear();
}
void MainWindow::on_deleteButton_clicked()
{
int row = ui->tableView->currentIndex().row();
int row = tableView->currentIndex().row();
if (row < 0)
return;

@ -4,6 +4,11 @@
#include <QMainWindow>
#include <QVector>
#include <QStandardItemModel>
#include <QTableView>
#include <QLineEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include "student.h"
QT_BEGIN_NAMESPACE
@ -25,10 +30,18 @@ private slots:
void on_deleteButton_clicked();
private:
Ui::MainWindow *ui;
QVector<Student> students; // 学生信息列表
QStandardItemModel *model; // 数据模型
// 纯代码声明控件
QTableView *tableView;
QLineEdit *idEdit;
QLineEdit *nameEdit;
QLineEdit *scoreEdit;
QPushButton *addButton;
QPushButton *deleteButton;
void refreshTable(); // 刷新表格显示
};
#endif // MAINWINDOW_H

@ -6,9 +6,9 @@
class Student
{
public:
QString id; // 学号
QString name; // 姓名
double score; // 成绩
QString id; // 学号
QString name; // 姓名
double score; // 成绩
};
#endif // STUDENT_H

Loading…
Cancel
Save