From a9c615c6b534dc61e2c42e9f34c524057bc65f52 Mon Sep 17 00:00:00 2001 From: "rick.chan" Date: Fri, 26 Jul 2024 14:38:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=B5=84=E6=96=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rick.chan --- Documents/Resources/资源网站.md | 3 + .../Qt/QML/QML_应用程序开发技术总结.md | 94 ++++++++++++++++++- Software/System/MSYS2/MSYS2_安装和使用.md | 17 ++++ 3 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 Software/System/MSYS2/MSYS2_安装和使用.md diff --git a/Documents/Resources/资源网站.md b/Documents/Resources/资源网站.md index eb2bfc9..bd10f0b 100644 --- a/Documents/Resources/资源网站.md +++ b/Documents/Resources/资源网站.md @@ -209,6 +209,9 @@ title: 资源网站 - [Music Player GO](https://github.com/enricocid/Music-Player-GO) - [TimberX](https://github.com/naman14/TimberX) - [RetroMusicPlayer](https://github.com/RetroMusicPlayer/RetroMusicPlayer) +- [TinyWall](https://github.com/pylorak/TinyWall): A free, lightweight and non-intrusive firewall. +- [Free Firewall](https://www.evorim.com/zh/free-firewall): Free firewall is a full-featured professional firewall that protects against the threats of the Internet. +- [MSYS2](https://www.msys2.org/) ## 14. BT 资源 diff --git a/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md b/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md index 3f567a2..6e7a901 100644 --- a/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md +++ b/Software/Development/Environment/Qt/QML/QML_应用程序开发技术总结.md @@ -58,8 +58,13 @@ published: true - [9.3. 通过信号槽传递自建类型](#93-通过信号槽传递自建类型) - [9.4. QML 与 C++ 交互综合示例](#94-qml-与-c-交互综合示例) - [10. Linux 下为 Qt Quick 应用程序隐藏鼠标指针](#10-linux-下为-qt-quick-应用程序隐藏鼠标指针) -- [11. Windows 下 QML 程序的打包发布](#11-windows-下-qml-程序的打包发布) -- [12. 外部参考资料](#12-外部参考资料) +- [11. 打包发布与部署](#11-打包发布与部署) + - [11.1. Windows 下 QML 程序的打包发布](#111-windows-下-qml-程序的打包发布) + - [11.2. 运行环境设置](#112-运行环境设置) +- [12. QML 与 OpenGL](#12-qml-与-opengl) + - [12.1. 在不支持 OpenGL 的机器上运行 QML 程序](#121-在不支持-opengl-的机器上运行-qml-程序) + - [12.2. 切换 OpenGL 模式](#122-切换-opengl-模式) +- [13. 外部参考资料](#13-外部参考资料) ## 1. 基础部分 @@ -1441,7 +1446,9 @@ MouseArea { } ``` -## 11. Windows 下 QML 程序的打包发布 +## 11. 打包发布与部署 + +### 11.1. Windows 下 QML 程序的打包发布 Qt 提供了导出 Qt 环境变量的命令行脚本,比如“Qt 5.15.2 (MinGW 8.1.0 64-bit)”,运行该脚本可进入带有 Qt 环境变量的命令行界面,之后可通过如下命令打包程序(编译生成的可执行程序需要拷贝到\): @@ -1452,7 +1459,86 @@ windeployqt [--qmldir ] Qt 自带的打包程序会添加额外的库,如果想进一步减小体积,可手动筛减。 -## 12. 外部参考资料 +### 11.2. 运行环境设置 + +Qt 程序启动时会检查系统环境变量,传入参数等。在部署 Qt 程序时,需要正确设置环境变量以及启动参数。其中环境变量设置在 Linux 中可修改 /etc/environment 或者 ~/.bashrc,甚至是 systemd 服务文件(.service 文件)中配置。 + +Windows 下可在“系统->高级系统设置->环境变量”中进行设置。 + +也可以在 Qt 程序源代码最开始的地方使用 qputenv() 函数进行设置,比如: + +```cpp +int main(int argc, char *argv[]) +{ + qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); + // ... + QGuiApplication app(argc, argv); + // ... +} +``` + +## 12. QML 与 OpenGL + +### 12.1. 在不支持 OpenGL 的机器上运行 QML 程序 + +Qt QML 程序默认使用 OpenGL 进行渲染,但某些系统由于没有 GPU 或者其他原因,导致不支持 OpenGL,或者 OpenGL 版本无法满足要求,此时可指定 Qt 程序使用软件渲染方式(使用 CPU),这可以通过设置环境变量来实现: + +```bash +QT_QUICK_BACKEND=software +# 或 legacy QMLSCENE_DEVICE +QMLSCENE_DEVICE=softwarecontext +``` + +QT_QUICK_BACKEND 可选值为: + +- rhi +- software +- openvg + +也可在 Qt 程序源码中使用 [static] void QQuickWindow::setSceneGraphBackend(QSGRendererInterface::GraphicsApi api) 函数实现: + +```cpp +int main(int argc, char *argv[]) +{ + QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software); + // ... + QGuiApplication app(argc, argv); + QQuickView view; + // ... +} +``` + +QSGRendererInterface::GraphicsApi 的值可以为: + +- QSGRendererInterface::Unknown : An unknown graphics API is in use +- QSGRendererInterface::Software : The Qt Quick 2D Renderer is in use +- QSGRendererInterface::OpenGL : OpenGL ES 2.0 or higher +- QSGRendererInterface::Direct3D12 : Direct3D 12 +- QSGRendererInterface::OpenVG : OpenVG via EGL +- QSGRendererInterface::OpenGLRhi : OpenGL ES 2.0 or higher via a graphics abstraction layer. This value was introduced in Qt 5.14. +- QSGRendererInterface::Direct3D11Rhi : Direct3D 11 via a graphics abstraction layer. This value was introduced in Qt 5.14. +- QSGRendererInterface::VulkanRhi : Vulkan 1.0 via a graphics abstraction layer. This value was introduced in Qt 5.14. +- QSGRendererInterface::MetalRhi : Metal via a graphics abstraction layer. This value was introduced in Qt 5.14. +- QSGRendererInterface::NullRhi : Null (no output) via a graphics abstraction layer. This value was introduced in Qt 5.14. + +***注意:Qt 的 VideoOutput 不能使用软件渲染即 Qt Quick Software Adaptation。*** + +### 12.2. 切换 OpenGL 模式 + +Qt 可以选择使用 Desktop 版本的 OpenGL 还是其他,设置方式同样是通过设置环境变量来实现: + +```bash +QT_OPENGL=desktop +``` + +QT_OPENGL 可选参数为: + +- desktop:使用 Desktop 版本的 OpenGL +- es2:嵌入式版本的 OpenGL(OpenGL ES) +- angle:使用 angle directX接口 +- software:Windows 下依赖 opengl32sw.dll + +## 13. 外部参考资料 1. [深入了解JS中的整数](https://www.jianshu.com/p/1ba45c3894ab) 2. [QML 中的信号与槽](https://blog.csdn.net/Love_XiaoQinEr/article/details/123746983) diff --git a/Software/System/MSYS2/MSYS2_安装和使用.md b/Software/System/MSYS2/MSYS2_安装和使用.md new file mode 100644 index 0000000..3039077 --- /dev/null +++ b/Software/System/MSYS2/MSYS2_安装和使用.md @@ -0,0 +1,17 @@ +# MSYS2 安装和使用 + +MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing and running native Windows software. + +下载地址:[MSYS2 官网](https://www.msys2.org/) + +安装完成后,运行 MSYS2 MSYS。然后输入以下命令更新软件包数据库和核心包: + +```bash +pacman -Syu +``` + +安装开发工具: + +```bash +pacman -S gcc make vim git +```