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

1.数据库连接层是连接数据库用的文件包
这边主要是采用单例模式实现数据库的连接
2.Model层主要是封装数据构成类的过程
一般这个model层不进行设计了,因为前框界面的数据直接传给业务层,更新数据库就行了,可以忽视这个层
如果要实现这个层,我们可以用快捷键实现这个层封装的数据,一般要和数据库的表的数据是一致的,新建student类如下

学生有id,姓名,性别,年龄,班级号等基本信息
按住alt+Enter

选择第一个getset封装
生成如下代码:

3.业务层
如果没有model层,我们就直接将ui前端数据传递给业务层,在业务层更新数据库
比如
cpponClicked: { 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范式,但是我们还是要注意级联删除,因为有时候我们不能删除引用表的历史数据,所以有时候不能用级联删除。