python+qt5项目管理系统开发_Qt5——从零开始的学生管理系统

Qt教程——从零开始的学生管理系统(文件)

一、项目设计

1、需求分析

记录并处理学生成绩信息。

1)添加新的学生数据;

2)根据学号对已有的学生数据进行修改;

3)根据学号删除已存在的学生信息;

4)根据学号查询学生信息;

5)根据各门成绩与平均成绩进行排序。

2、窗口设计

1)菜单窗口;

2)添加学生窗口;

3)修改信息窗口(包括删除信息);

4)查询学生窗口

5)排序窗口;

3、数据结构设计

以一个类StudentInfo储存单个学生信息,学生类中包括:

姓名(字符串)

学号(整型)

数学成绩(整型)

英语成绩(整型)

C语言程序设计成绩(整型)

平均成绩(双浮点数)

二、项目制作

1、建立项目

打开Qt Creator 文件->新建文件或项目(Ctrl+N)->其他项目->空的Qt项目(Empty qmacke Project)

2、添加窗口

将其命名为StudentManagementSystem_Qt一路下一步到结束。

右击项目名称->Add New->Qt -> Qt设计师界面模板选择Widget下一步,我们当前建立的是菜单窗口,所以将其类名命名为MenuWidget一路下一步到结束。

以同样的方式建立添加学生窗口:AddStudentWidget、修改信息窗口:ModifyWidget、查询窗口:SelectWidget、排序窗口:SortWidget。

完成后的项目资源管理器页面中应该有如下文件

我们可以看到Qt中建立模板为widget的设计师界面就是建立了一个c++类(继承自QWidget)与其对应的ui文件 ,这个ui文件便是Qt Designer设计文件,它会在编译时生成一个ui_*.h文件,这样我们便可以用c++的方式对其进行调用。

之后打开我们的menuwidget.h,会发现其中存在错误。

这是因为我们的项目中没有连接Qt Widgets库,在StudentManagementSystem_Qt.pro中添加

QT += widgets

可解决问题。

3、实现窗口之间的切换

现在,就是实现我们新建立的几个窗口之间的窗口切换问题的时候了,这里我打算使用QStackedLayout实现窗口切换。

QStackedLayout继承自QLayout,提供了多页面切换的布局,一次只能看到一个界面,在我的Qt5——从零开始的Hello World教程(Qt Creator) 中提到过,大部分控件都继承自QFrame,而QFrame又继承自QWidget,所以QStackedLayout完全可以实现窗口之间的切换。

现在我们用与上一步相同的方法建立一个窗口MainWidget。并添加一个main.cpp来写main函数

在mainwidget.h中修改MainWidget的定义,为其添加成员

MenuWidget *menuwidget; //菜单窗口

AddStudentWidget *addstudentwidget; //添加学生窗口

SelectWidget *selectwidget; //查询窗口

ModifyWidget *modifywidget; //修改窗口

SortWidget *sortwidget; //排序窗口

QStackedLayout *stackLayout; //QStackedLayout布局

当然,也需要引用其对应的头文件。

#include #include"menuwidget.h"#include"addstudentwidget.h"#include"selectwidget.h"#include"modifywidget.h"#include"sortwidget.h"

在MainWidget.cpp中将MainWidget设为stackLayout布局,声明我们需要的窗口,并将其加入stackLayout布局中去。

在MainWidget.cpp中显示调用MainWidget构造函数。

MainWidget::MainWidget(QWidget *parent) :

QWidget(parent),

ui(newUi::MainWidget)

{

ui->setupUi(this);

}

处添加。

menuwidget = newMenuWidget;

addstudentwidget= newAddStudentWidget;

selectwidget= newSelectWidget;

modifywidget= newModifyWidget;

sortwidget= newSortWidget;

stackLayout= newQStackedLayout;

stackLayout->addWidget(menuwidget);

stackLayout->addWidget(addstudentwidget);

stackLayout->addWidget(selectwidget);

stackLayout->addWidget(modifywidget);

stackLayout->addWidget(sortwidget);

setLayout(stackLayout);

之后就需要使用Qt designer 设计页面了(当然在对应类中手动添加成员控件也没有任何问题)。

双击menuwidget.ui就打开了设计页面

在menuwidget中添加如下按钮(push button)

以同样的方法在addstudentwidget,selectwidget,modifywidget,sortwidget中都添加一个返回按钮returnButton。

为这些按钮设计点击槽函数。

menuwidget.h:privateslots:voidon_addButton_clicked();voidon_selectButton_clicked();voidon_modifyButton_clicked();voidon_sortButton_clicked();void on_exitButton_clicked();

还需要一个方法作为stackLayout切换页面的信号

signals:void display(int number);

在menuwidget.cpp中给出函数定义

voidMenuWidget::on_addButton_clicked(){

emit display(1);

}voidMenuWidget::on_selectButton_clicked(){

emit display(2);

}voidMenuWidget::on_modifyButton_clicked(){

emit display(3);

}voidMenuWidget::on_sortButton_clicked(){

emit display(4);

}voidMenuWidget::on_exitButton_clicked(){

QApplication::exit();

}

emit  把connect把信号和槽进行关联,emit某个信号,就相当于调用这个信号connect时所关联的槽函数。至于更多关于 emit信息诸位可以搜索或者看帮助文档。

之后为addstudentwidget,selectwidget,modifywidget,sortwidget窗口中的按钮设计信号与槽函数

在(类名).h中添加

signals:void display(intnumber);privateslots:void on_returnButton_clicked();

在(类名).cpp中添加

void(类名)::on_returnButton_clicked(){

emit display(0);

}

现在可以使用的只有退出按钮,跳转按钮还需要在mainwidget.cpp中用connect函数连接。

到此为止便完成了页面切换功能。

到次为止的源码:

4、完善窗口设计

1:AddStudentWidget

我们需要提示标签来指明输入的数据,也需要输入框来接收用户的输入,QLabel与QLineEdit可以满足我们的要求。

QLabel,QLineEdit有方法setText(“内容”)来改变其显示的文字,有方法setGeometry (起始横坐标,起始纵坐标,宽, 高)来设置左上角起始位置与大小。

当然这些都可以在Qt Designer中直接设置。打开addstudentwidget.ui。

根据之前设计的数据结构,需要nameLineEdit、idLineEdit、mathLineEdit、enLineEdit、cLineEdit五个QLineEdit接收学生的姓名、学号、数学成绩、英语成绩、C语言成绩(平均成绩由计算得出),需要nameLabel、idLabel、mathLabel、enLabel、cLabel五个QLabel提醒用户输入数据,需要addButton 一个QPushButton来添加学生。

最终将addstudentwidge

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值