QT系统的MVC模式架构

我们设计QT系统时,一般分为数据库连接层、业务层、模型层和前端界面层。

系统架构文件设计如下

1.数据库连接层是连接数据库用的文件包

这边主要是采用单例模式实现数据库的连接

2.Model层主要是封装数据构成类的过程

一般这个model层不进行设计了,因为前框界面的数据直接传给业务层,更新数据库就行了,可以忽视这个层

如果要实现这个层,我们可以用快捷键实现这个层封装的数据,一般要和数据库的表的数据是一致的,新建student类如下

学生有id,姓名,性别,年龄,班级号等基本信息

按住alt+Enter

选择第一个getset封装

生成如下代码:

3.业务层

如果没有model层,我们就直接将ui前端数据传递给业务层,在业务层更新数据库

比如

cpp 复制代码
onClicked: {
                    if (validateInput()) {
                        var student = {
                            "id": idField.text,
                            "name": nameField.text,
                            "age": parseInt(ageField.text),
                            "gender": genderCombo.currentText,
                            "classNum": classNumField.text
                        }
                        var errorMsg;
                        if(dbManager.insertStudent(student.id, student.name, student.age, student.gender, student.classNum, errorMsg)) {
                                    statusLabel.text = "提交成功!"+student.gender
                                    statusLabel.color= "green"
                                    //studentAdded(student)
                                    // 可选:提交后清空输入框
                                    // idField.clear(); nameField.clear(); ageField.clear();
                                } else {
                                    statusLabel.text = "保存失败:" + errorMsg
                                    statusLabel.color= "red"
                                }
                    } else {
                        statusLabel.text = "请检查输入内容是否完整且合法。"
                        statusLabel.color= "red"
                    }
                }

直接增加学生信息,如果再封装student,传递student对象就有一些画蛇添足。

业务层主要处理的就是增加、删除、修改、查询数据库表的一些基本操作。

4.前端ui层

就是设计界面,设计界面我们之前也讨论过,就是上中下三层设计基本布局。qt可以用widget来实现也可以用qml。区别就是qml是现代ui特性,更美观。widget设计的可能会相对快一下,但是更老史界面可能是普普通通。

qml设计要把各个功能的qml放在各个功能文件夹下,这样更能区分文件架构。

widget设计就是把每个widget设计成indexdwidget子界面控件(堆叠页面控件),根据各个功能显示其中的一页。

还是用widget设计的相对较快,因为qml设计界面上的每个控件属性很多,而且需要编写,widget属性是给出的,直接修改就行。两者对比

cpp 复制代码
Text {
                text: "系统注册号4353465465654"
                font.pixelSize: 32
                font.bold: true
                color: "#2c3e50"

                // 在 ColumnLayout 中,Layout.alignment 控制水平对齐
                Layout.alignment: Qt.AlignHCenter
                // 如果希望 Text 高度自适应,不需要设置固定高度
            }

前期的话还是要掌握widget设计系统的基本框架,后期还需要学习qml设计界面的框架。

5.数据库设计,一般是遵循3范式,但是我们还是要注意级联删除,因为有时候我们不能删除引用表的历史数据,所以有时候不能用级联删除。