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 \ mainwindow.h \
student.h student.h
FORMS += \
mainwindow.ui
# Default rules for deployment. # Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin qnx: target.path = /tmp/$${TARGET}/bin

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

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

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

Loading…
Cancel
Save