Qt6.11.1 qml布局设计子页面,qtC++和qml交互

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++代码放在一个文件夹下。