APP下载

基于Qt的高校招生信息系统框架模式的研究

2021-07-30张晓光何佰丹潘华强

电子元器件与信息技术 2021年4期
关键词:图形界面文件夹视图

张晓光,何佰丹,潘华强

(武汉软件工程职业学院,湖北 武汉 430205)

0 引言

高校招生录取数据是高等院校使用全国普通高校招生网上录取院校子系统进行招生录取导出的数据。高校招生信息系统主要实现录取数据的存储、分析、汇总、打印通知书等功能。

全国普通高校招生网上录取应用软件高校子系统(以下简称录取系统),是教育部组织全国普通高校招生网上录取课题组开发研制,为普通高校完成本、专科招生网上录取工作设计的、在录取阶段给高校提供通过网络与省级招办交互招生信息、完成招生录取工作的一个专用软件。

在1996年以前,高校招生完全依靠招生工作人员奔走各地,在当地招办的配合下进行现场录取[1],高校招生工作自1999年在重庆等9个试点省(自治区、直辖市)及北大、清华等12所高校开始试行网上录取[2],2001年为进一步提高高校招生的网络化发展,我国建立了“全国普通高校招生网上录取系统”并投入使用[3]。自2001年普通高校招生全面实施网上录取以来,内陆地区的所有普通高校均使用本系统在除港澳台及广东省外的省、自治区、直辖市开展远程网上录取工作。后来,香港部分高校在内地的招生工作也使用此系统进行。在新高考改革的背景下,新型全国普通高校招生网上录取系统也孕育而出,新版本仅用于在改革后省份的录取工作,其他省份的录取工作使用原版本进行。

1 高校招生信息系统简介

录取系统是录取数据的来源。由于招生系统导出的录取数据格式只是录取系统里考生数据库表格文件的简单拷贝,每张数据表格字段名称都是字母缩写,数据表格之间存在链接关系,所以招生系统导出的数据对于非专业用户来说不具备可读性。

高校招生信息系统(以下简称招生管理系统)首要处理任务是处理录取系统导出的录取数据,将数据库中必要的考生相关信息提取出来到一张数据表中,并以中文命名字段名称。在多个省份有招生任务的高校需要多次导出各个省份的所有批次的录取数据,并通过招生管理系统将不同省份的不同批次的录取数据进行汇总。

招生管理系统在导入一个包含录取数据的文件夹后,进行数据的分析与汇总,并以表格形式向用户显示已经导入的录取数据的相关信息。用户可以通过点击选择已经导入的某行录取数据(即一次导入的录取数据),并进行打印通知书或导出相关录取的考生信息。

招生管理系统包含录取通知书套打功能。套打功能是应用在打印多页同类的纸张,此同类的纸张大部分内容相同,只有某几个位置的数据每一张都不一样,套打功能一般是把相同的部分与需要修改的部分分开打印,先把相同的部分打印出来,再直接在上面打印不同的部分。招生管理系统的通知书套打功能是打印通知书中不同的部分,不同的部分的数据就是录取数据中的各个考生姓名等信息。

招生管理系统的通知书套打功能的主要模块是通知书套打模板的编辑功能。模板编辑功能需要在纸张的恰当位置设置套打的数据项,需要通过图形界面与鼠标拖动操作来编辑数据项的位置。

2 Windows下图形界面开发

Windows下主流的图形界面开发,最早的有VB开发,使用的是Basic语言,目前无论是Visual Basic还是Basic语言基本已被淘汰。在C++语言流行的时段Windows图形界面开发有MFC框架,MFC也是一个比较成熟的应用程序开发框架[4],目前新的软件基本没有使用MFC进行开发了,只对以前MFC软件进行维护。微软在.net和C#语言的支持下的开发了图形界面开发库WPF,WPF是微软新一代矢量图形系统,用于为不同用户界面提供统一的显示系统[5]。

2.1 Qt简述

Qt是跨平台的图形用户界面(GUI)应用程序开发框架。于1995年5月首次公开发行,2016年Qt公司独立并在纳斯达克赫尔辛基独立上市,目前最新的版本为Qt 6。Qt让原型设计、开发、测试、部署的周期更快,更高效。Qt与众多操作系统和硬件兼容,只需编写一次源代码,就可以部署在任何需要的地方。

2.2 Python下使用Qt

由于计算机运行速度的提升,编程语言得到了发展,从最初的使用0、1二进制进行编程的方式进步到汇编语言、面向过程的编程语言、面向对象的编程语言、解释型编程语言,编程的难易度在降低、代码长度在降低,是编程语言发展的趋势。

Python语言是最近流行起来的面向对象编程语言,是解释型的脚本编程编程语言,需要Python运行库才能运行。

Python下Qt开发的库有PyQt和PySide。PyQt要比PySide推出时间早得多,由于推出时间早,PyQt就比较成熟了,并且资料也很完善,最开始是有PyQt4对应的是Qt4版本,后来推出了PyQt5,对应Qt5版本。PyQt的采用的是GPLv3许可证和需要购买版权的商业许可证发布的,GPLv3许可证大概意思就是说,使用PyQt后你的程序就必须要开源,如果闭源商用就会违反协议,后果自负[6]。对比PyQt,PySide就要晚的多问世了。上面我们说到PyQt的开发商是Riverbank Computing,而PySide就不同了,是Qt公司开发的,PySide2对应Qt 5版本,PySide6对应Qt 6版本。PySide是LGPL协议的,LGPL协议是一个商业友好的协议,使用LGPL协议开发闭源程序,如果你使用动态链接的形式,那么,你可以以任何形式(商业的、非商业的、开源的、非开源的等等)发布你的应用程序[7]。

3 招生管理系统的Qt架构设计

招生管理系统是使用Python语言开发,并使用PySide库开发Qt架构下的图形界面应用程序。

3.1 Qt架构简述

Qt的图形界面架构有三大主模块:QtCore、QtGui、QtWidgets。

QtCore包含的是核心的非GUI的功能类,如信号和插槽、属性、项模型的基类、序列化等。QtCore的Meta-Object System(元对象系统)为对象间通信、运行时类型信息和动态属性系统提供了信号和插槽机制[8]。信号和插槽用于对象之间的通信。信号和插槽机制是Qt的一个核心特性,可能是与其他框架提供的特性最为不同的部分。

QtGui是继承QtCore的包含GUI相关功能的类,包含事件、窗口和屏幕、OpenGL和基于光栅的二维绘制以及图像。

QtWidgets包含为应用程序提供现成的小部件,包括UI的图形元素。Qt小部件模块提供了一组UI元素来创建经典的桌面风格的用户界面。Qt框架的主要用户界面技术是Qt快速控制和Qt小部件。Qt快速控制接口是流体、动态的。Qt小部件用于创建复杂的桌面应用程序。

3.2 Qt的Model/View(模板/视图)编程

在Smalltalk中有Model-View-Controller(MVC)(模板-视图-控制器)设计模式。MVC由三种对象组成,Model(模型)是应用程序对象,View(视图)是它的用户界面的显示表示,Controller(控制器)是对用户输入的反应。在MVC之前,用户界面设计倾向于将这些对象组合在一起,MVC将它们解耦以增加灵活性和重用性。

如果View(视图)和Controller(控制器)对象相结合,结果就是Qt的Model/View(MV)(模型/视图)体系结构[9]。MV体系结构仍然将数据的存储方式与呈现给用户的方式分开,MV体系结构是基于MVC相同的原则,但提供了一个更简单的框架。

Qt包含一组视图类,这些类使用Model/View(模板/视图)体系结构来管理数据之间的关系以及数据呈现给用户的方式。此体系结构引入的功能分离为开发人员提供了更大的灵活性,并提供了一个标准的模型接口,允许广泛的数据源与现有的项视图一起使用。

数据的存储方式与显示给用户的方式分开,这种分离使得可以在几个不同的视图中显示相同的数据,并实现新的视图类型,而无需更改底层数据结构。为了灵活地处理用户输入,Qt中引入了Delegate(委托)的概念,使用Delegate(委托)的优点是,它允许我们定制呈现和编辑数据项的方式。

3.3 Qt下招生管理系统的架构设计

使用招生管理系统的前提是一个年份的所有导出的录取数据放在一个根目录文件夹中,根目录文件夹中每一个子文件夹里存储的是从录取系统导出的一个省市的一个录取批次的录取数据(也可是包含一个省份的多个录取批次线数据)。此时的子文件夹即为投档单子文件夹数据。根目录文件夹里还包含当前年份的配置信息:根投档单属性信息、专业信息数据、专业修改数据。

招生管理系统主要需要与用户进行图形界面交互的有投档单子文件夹数据、根投档单属性数据、专业信息数据、专业修改数据、导出格式配置数据和通知书模板。

通知书模板的编辑功能主要使用的是Qt的绘制功能,模板编辑功能的核心类是设计画布类(DesignCanvas),DesignCanvas类从Qt的QtWidgets.QWidget派生,通过重载与鼠标操作有关的4个函数(鼠标移动、鼠标按下、鼠标释放、鼠标双击)来获取与鼠标有关的操作,实现模板中元素的拖动、缩放等功能。通过重载绘制(paintEvent)函数来自定绘制相关元素的不同状态(选中、拖动、缩放等)。由于QWidget没有鼠标的单击操作,而单击操作是模板编辑中必须要的一个功能,所有只能通过鼠标按下和鼠标释放这两个事件来判断鼠标的单击操作。模板中元素的框选功能也是通过鼠标按下、拖动和释放来实现的。模板中多选操作是通过当用鼠标单击元素时判断键盘Ctrl键是否按下来实现的。

投档单子文件夹数据信息以表格的形式显示给用户,每个子文件夹信息为一行数据,通过Qt的QtWidgets.QTableView来实现表格显示。每一行子投档单文件夹信息显示的都是文本内容信息,但是修改某些字段时需要特殊的编辑模式,比如录取时间字段。录取时间的默认值是导入子投档单文件夹信息的时间,当然用户也可以进行修改。当在表格(QTableView)中修改某个单元格时,QTableView中单元格内容默认是文本内容,修改也是通过键盘输入来修改文本,如果需要改变表格中数据的设置方式,则需要通过Qt的Model/View模式中的Delegate(委托)功能。通过从QtWidgets.QStyledItemDelegate继承来创建自己的Delegate类:DateDelegate(日期委托类)。DateDelegate类通过重载createEditor(创建编辑器)、setModelData(设置Model数据)、setEditorData(设置编辑器数据)这三个函数来实现日期类型的编辑功能。在createEditor(创建编辑器)函数中创建一个Qt中的QtWidgets.QDateEdit对象来实现日期类型编辑功能,同时在上面两个设置数据的函数中(setModelData、setEditorData)通过适应QDateEdit来设置相应数据。

在设置根投档单属性时,也是以表格形式(QTableView)设置。由于属性有三种不同的属性类别(静态、文本、日期),在修改表格(QTableView)中属性类别时以下拉列表框的形式让用户选择属性类别。此次也需要从使用委托(Delegate)功能,与上面日期委托类不同的是,此时创建的是QtWidgets.QComboBox类对象。

另一种表格(QTableView)中单元格的特殊修改功能是选择功能,选择功能是指在表格中选择一行数据,在这一行数据前打勾,用户再次单击后取消打勾。此种实现是通过Qt的信号和插槽机制,监听表格的单击事件,特殊处理打勾的单元格的单击事件。

在Qt的MV架构中数据是存储在Model中的,招生管理系统需要将数据存储在硬盘中,这时只需要将Model中的数据以原表格形式存储为Excel表格即可,Excel表格的第一行即为标题行,从第二行开始为数据。当系统从硬盘中读取数据并以表格形式显示给用户时,此时需将Excel表格数据转换成Model数据。从Excel中读取数据到系统里直接采用QtGui.QStandItemModel类对象存储数据,当以表格形式(QTableView)显示时,直接将此Model(QStandItemModel)对象与View(QTableView)对象进行链接即可,用户修改后保存数据时,可直接将Model存储为Excel数据保存,无需其他的转换操作。Qt下招生管理系统的图形用户界面MV架构如下图所示:

图1 Qt 下招生管理系统MV 架构图

4 结论

借助Qt图形界面架构,让用户可以以图形界面方式操作招生相关的数据,提高了招生管理系统的适用性,让非计算机专业人士也能方便处理招生相关的数据。图形界面只能招生管理系统的一个部分,另一重要部分是内部招生数据的处理。

猜你喜欢

图形界面文件夹视图
摸清超标源头 大文件夹这样处理
用VMRun快速置备千台虚拟机
5.3 视图与投影
视图
调动右键 解决文件夹管理三大难题
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
重看图形界面“扁平化”与“拟物化”之争——关于设计思维的探讨
挂在墙上的文件夹
不容忽视的空文件夹