界面显示一个数字 → 点击按钮数字 +1, 这个数字是全局共享的,所有界面都能用。
Qt 小白终极学习笔记逐行代码大白话解释零基础也能看懂我把全部6个文件每一行代码都用最通俗、最详细的方式讲清楚不跳步、不省略、不使用专业术语你照着看就能完全理解一、项目是干嘛的这个程序非常简单界面显示一个数字 → 点击按钮数字 1这个数字是全局共享的所有界面都能用。二、文件结构必须记住项目文件夹 ├─ backendhelper.h → C 后台工具声明 ├─ backendhelper.cpp → C 后台工具实现 ├─ main.cpp → 程序入口启动 ├─ GlobalTheme.qml → QML 全局变量 ├─ qmldir → 全局单例注册必须有 └─ main.qml → 主界面显示按钮三、逐文件逐行解释完整版1. backendhelper.h作用定义一个C工具类给QML提供数据// 如果没定义 BACKENDHELPER_H// 作用防止文件被重复包含#ifndefBACKENDHELPER_H#defineBACKENDHELPER_H// 引入Qt的基类必须写#includeQObject// 定义一个类名字叫 BackendHelper// 继承 QObject 才能和 QML 通信classBackendHelper:publicQObject{// 必须写开启信号槽、属性功能Q_OBJECT// 定义一个私有变量用来存数字intm_myNumber;// 最重要// 把C变量暴露给QML使用// READ读取// WRITE修改// NOTIFY变化通知Q_PROPERTY(intmyNumber READ myNumber WRITE setmyNumber NOTIFY myNumberChanged)public:// 构造函数explicitBackendHelper(QObject*parentnullptr);// 读函数返回数字intmyNumber()const{returnm_myNumber;}publicslots:// 写函数修改数字voidsetmyNumber(intmyNumber){// 如果数字没变不做处理if(m_myNumbermyNumber)return;// 更新数字m_myNumbermyNumber;// 发送信号通知QML更新emitmyNumberChanged(m_myNumber);}signals:// 数字变化时发出的信号voidmyNumberChanged(intmyNumber);};#endif// BACKENDHELPER_H2. backendhelper.cpp作用给C类设置初始值// 引入头文件#includebackendhelper.h// 构造函数BackendHelper::BackendHelper(QObject*parent):QObject(parent){// 初始值设为 42m_myNumber42;}3. main.cpp作用程序入口启动软件// 引入应用程序#includeQGuiApplication// 引入QML引擎#includeQQmlApplicationEngine// 引入我们写的C类#includebackendhelper.h// 程序从这里开始intmain(intargc,char*argv[]){// 开启高清屏幕QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);// 创建应用QGuiApplicationapp(argc,argv);// 把C类注册给QML使用qmlRegisterTypeBackendHelper(MyBackend,1,0,BackendHelper);// 创建QML引擎QQmlApplicationEngine engine;// 加载主界面constQUrlurl(QStringLiteral(qrc:/main.qml));// 加载失败自动退出QObject::connect(engine,QQmlApplicationEngine::objectCreated,app,[url](QObject*obj,constQUrlobjUrl){if(!objurlobjUrl)QCoreApplication::exit(-1);},Qt::QueuedConnection);engine.load(url);// 让程序一直运行returnapp.exec();}4. GlobalTheme.qml作用全局变量任何QML都能读写// 导入QtQuick基础库 import QtQuick 2.12 // 声明为全局单例 pragma Singleton // 轻量级对象只存数据不显示UI QtObject { // 定义全局变量 myValue默认 100 property int myValue:100 }5. qmldir作用告诉Qt这是全局单例singleton GlobalTheme GlobalTheme.qml6. main.qml作用主界面显示文字按钮// 基础UI库 import QtQuick 2.12 // 窗口 import QtQuick.Window 2.12 // 导入C后端 import MyBackend 1.0 // 按钮 import QtQuick.Controls 2.12 // 主窗口 Window { visible: true // 显示窗口 width: 640 // 宽度 height: 480 // 高度 title: qsTr(Hello World) // 标题 // 横向布局 Row{ anchors.centerIn: parent // 居中 spacing: 20 // 间距 // 显示文字 Text { font.pointSize: 25 text: GlobalTheme.myValue // 显示全局变量 } // 按钮 Button{ text: Increase onClicked: GlobalTheme.myValue1 // 点击1 } } }四、小白必须记住的 5 个知识点.h 文件声明有什么.cpp 文件实现功能Q_PROPERTYC 与 QML 互通GlobalTheme全局变量任何地方都能用qmldir全局单例必须注册五、运行效果界面显示100点击按钮1数字实时更新所有 QML 文件都能访问这个数字