1.QT6.11.1设计布局界面如下,我们主要是把界面设计成上中下

中间部分分为左侧菜单栏,中间右侧部分为显示主页面。

如图点击增加学生,跳转到增加学生界面

学生信息通过form表单提交到后台数据库。
2.我们如何在qml实现C++代码的实现
实现代码如下
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"
}
}
通过C++传递dbmanager对象到qml,使得qml能够调用增加学生信息的函数
C++如何传递dbmanager对象
cpp
StudentDbManager *dbManager = new StudentDbManager(&app);
bool isConnected = dbManager->connectDb(
"127.0.0.1", // 数据库地址
"remote", // 数据库账号
"123456", // 你的数据库密码
"sys" // 数据库名
);
TreeModel *model = new TreeModel(&app);
//StudentReceiver studentReceiver;
// 2. 将模型暴露给 QML,上下文属性名为 "treeModel"
engine.rootContext()->setContextProperty("treeModel", model);
engine.rootContext()->setContextProperty("dbManager", dbManager);
这段代码传递了两个对象,一个是treemodel对象,一个是dbmanager对象。
这样就实现了qml和C++交互
另外就QT项目需要改善的是:
每个功能可能多个qml,如何将每个功能的qml放在一个文件夹下。
另外将每个功能的C++代码放在一个文件夹下。