C/C++ 基于QT实现粗糙的学生管理系统

这篇博客介绍了如何使用C/C++和QT框架开发一个简单的学生管理系统,包括添加学生功能界面的实现,事件驱动的细化,以及文件保存。作者强调了信号与槽机制、模型-视图-控制器(MVC)设计模式在项目中的应用,并提供了逐步的实现过程。

下载地址:https://download.youkuaiyun.com/download/GameStrategist/12717944

简略说明:这不能算作一个可以放到简历上的项目
核心:利用 help 帮助手册查看预设函数,感觉英语好上手会很快;
机制:信号与槽
设计模式:模型 - 视图 - 控制器(MVC)(实际应用开发会分工,不会一个人全做)

  • 模型:应用程序对象。
  • 视图:屏幕演示。
  • 控制器:定义了用户界面响应用户输入的方式。

一.完成添加学生的功能界面

  • 1.+New Project,记得设置名称和文件目录等都不要出现中文字样
    设置类名为addStu,且继承 QDialog(QDialog类是对话框窗口的基类)
    在这里插入图片描述

  • 2.界面参数设置。(小项目 ui 界面直接设置,也可以利用坐标函数来设置)

2.1 ui 界面 geometry控件 宽度350 高度480 (界面是以像素点为单位)
2.2 ui 界面 选择控件如下所示

Display Widgets: Label      		 	七个 (欢迎标题,姓名,学号,性别,年龄,院系,兴趣,)
Input Widgets:  Line Edit  		 	两个(姓名,学号)
单选按钮 Buttons:Radio Button 		 	两个(性别)
下拉列表Input Widgets:Conmbo Box 	 	两个(年龄,院系)
多选按钮 Buttons:Check Box 			 	四个 (兴趣)
确定按钮 取消按钮  Buttons:Push Button 	两个

目前随意摆放,有个大概样子就可以了。

在这里插入图片描述
2.3 优化界面 通过两个控件 Layouts 和 Spacers(原则:由小至大,逐个布局)
如上图所示,每个小布局 水平布局 构成一个一个小的 layout (有关联的按住 Ctrl 点击就行)
“兴趣”右侧四个按钮需要先 栅格布局 再和 “兴趣” 进行水平布局
全部布局完成后,点击 垂直布局,此时结果如下:
在这里插入图片描述
现在的界面的对比度还是有问题,比如 文字 和 输入框 一个短一个长 很别扭
点击类似姓名这一小的 layout 注意是 layout
点击右侧会出现如下图所示,我们要做的就是修改 layoutStretch (控件按比例扩大缩小)
在这里插入图片描述
修改控件比例也可以选择右上角的侧面栏入手
在这里插入图片描述
layout 的参数大致为 1,8 和 1,4,4 觉得长了就用一个弹簧来纠正一下
在这里插入图片描述
简单运行一下,发现的确与想象中还是有差距的
在这里插入图片描述
原因是现在的 “添加学生”控件 是独立的,可以理解为会自适应界面大小

解决方案:1.将“添加学生”控件,也就是 label 中的 sizePollcy 中的垂直策略修改为 Fixed
(label 的高度无法改变,这样就能正常显示了)
在这里插入图片描述
接下来修改一下 label 字体的显示 (QLabel )
在这里插入图片描述
字大点(QWidget),笔者用styleSheet比较多
在这里插入图片描述
目前基本界面就可以确定了,然后开始修改 “各个控件” 的名称,要开始利用信号与槽机制了
在这里插入图片描述

姓名: le_name
学号:le_id
男:rbtn_male
女:rntn_fmale
年龄:cbb_age
院系:cbb_yx

二.细化界面,完成事件驱动

什么是事件驱动? 你点击一个按钮触发一个事件,这就是事件驱动。
(所有的事件结束后,需要点击 “确定按钮” 保存,所以确定就是事件驱动)

如何从控件中获取信息,首先先看控件有没有text,有就获取。(text内容属于QString)

还是利用 help手册,学习我们会用到的窗口。(QMessageBox消息对话框)
不想看英文,直接翻到下面看这种有代码的 demo,理解起来会很快。
在这里插入图片描述
我们的目的是给用户一个选择

// 1.新建对象
QMessageBox msgBox;

// 2.配置文件
//设置输出信息
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your changes?");
//利用预设宏 设置消息框的按钮
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
//设置默认按钮
msgBox.setDefaultButton(QMessageBox::Save);

// 3.显示并返回一个值 可以知道是哪个按钮点击的
int ret = msgBox.exec();

现象如下图所示在这里插入图片描述
稍加修改

msgBox.setText("请确认信息.");
msgBox.setInformativeText(name+'\n'+ id);
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);

得到如下图所示结构
在这里插入图片描述
但是 ret 这个返回值是干什么的?
答 : 可以利用switch case来判断是哪个按钮

switch (ret) {
case QMessageBox::Save:
            // Save was clicked
            break;
case QMessageBox::Discard:
            // Don't Save was clicked
            break;
case QMessageBox::Cancel:
            // Cancel was clicked
            break;
default:
            // should never be reached
            break;
      }

下图为help手册的demo:
在这里插入图片描述
但现在这个还不符合我们的需求,我们想要的是带有中文字样的按钮。
那么如何设置按钮为中文呢 ?(如上使用的按钮名称是预设的默认静态标准按钮)
直接修改成中文,编译会报错;
所以我们需要添加新的按钮,查询help手册,开头就是 addButton 函数

但是要中文与

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值