QT开发从入门到实战:信号槽机制、环境配置与图片查看器项目详解
1. 从“Hello World”到“我好像会了”一个QT新手的真实心路如果你在搜索引擎里敲下“QT入门”大概率会看到一堆从“下载安装”开始的教程然后是一堆控件拖拽的截图最后以一个简单的计算器或者记事本作为结束。作为一个从零开始一路踩坑过来的开发者我想说这种教程最大的问题在于它只告诉了你“怎么做”却很少解释“为什么这么做”以及“做的时候会遇到什么”。QT作为一个功能庞大、跨平台的C框架它的入门门槛被很多人低估了。今天我们不谈那些枯燥的官方文档复述我想以一个过来人的身份和你聊聊从“安装都费劲”到“能独立捣鼓出个小工具”这段路上那些真正关键的东西。这篇文章的目标就是帮你把“无门槛”这三个字落到实处让你避开我当年走过的弯路真正理解QT的运作逻辑而不仅仅是记住几个按钮的点击顺序。2. 环境搭建从“能用”到“好用”的抉择与避坑几乎所有教程的第一步都是安装但这里恰恰是第一个分水岭。你的选择会直接影响后续的学习效率和开发体验。2.1 安装包选择在线安装器 vs 离线安装包QT官方提供了在线安装器QT Maintenance Tool和离线安装包。对于国内开发者我强烈建议使用离线安装包。原因很简单在线安装器的服务器在国外下载速度极不稳定动辄数GB的组件下载很可能中途失败让人崩溃。你可以从国内镜像源如清华、中科大找到各个版本的离线安装包.run或.exe文件下载速度有保障。版本选择上对于纯粹的新手我建议选择QT 5.15 LTS的某个子版本如5.15.2。LTS代表长期支持社区资料最丰富遇到问题也最容易找到解决方案。尽管热词里有“qt archive中5.15 都是源代码”但请放心镜像站提供的通常是预编译好的安装包直接安装即可无需自己从源码编译——那是进阶玩家才需要考虑的事情。2.2 组件勾选别让未来的你为今天的节省买单安装时组件选择界面会让你眼花缭乱。一个核心原则是根据你的目标平台和用途来选但基础组件宁多勿少。对于Windows桌面开发MSVC 2019 64-bit如果你用Visual Studio或MinGW 64-bit如果你用QT Creator自带的编译器是必选的。SourcesQT源码和Debugging Tools也建议勾选方便日后调试和深入理解。关于Android开发热词中提到了“qt for android 的sdk和jdk怎么配置”。这确实是个大坑。如果你暂时不涉及移动端安装时可以完全不选任何Android组件。如果确实需要请记住QT安装器只提供QT for Android的库Android SDK、NDK和JDK需要你自行下载并配置环境变量。顺序应该是先安装并配置好JDK、Android SDK/NDK确保java、adb等命令在命令行可用然后在QT Creator的工具-选项-设备-Android中指定这些路径。很多人的“配置失败”都源于路径错误或版本不匹配。关于UWP、iOS等除非明确需要否则跳过保持环境纯净。2.3 安装后的第一件事解决“Clang Code Model”错误安装完成兴冲冲打开QT Creator可能会立刻弹出一个错误“Clang Code Model: error: the clangbackend executable ...”。这个错误非常常见它意味着QT Creator内置的代码智能提示Clang Code Model工具启动失败。解决方法通常很简单这个clangbackend.exe文件可能被杀毒软件误删或隔离了。请去错误提示中的路径例如C:\Qt\Qt5.12.7\Tools\QtCreator\bin查看该文件是否存在。如果不存在去杀毒软件的隔离区恢复它并添加信任。如果存在可能是权限问题尝试以管理员身份运行QT Creator一次。这个问题不影响编译和运行只影响代码补全但解决它能让你的编辑体验顺畅很多。3. 理解核心QT不仅仅是“拖控件”很多新手学完控件摆放就以为学会了QT。这就像学武功只学了招式不懂内功心法。QT的核心魅力在于其信号与槽Signals Slots机制和元对象系统Meta-Object System。这是你从“会用”到“理解”的关键飞跃。3.1 信号与槽对象间的“普通话”你可以把信号Signal理解为对象发出的一声“呐喊”比如按钮被点击了clicked()滑块被移动了valueChanged(int)。而槽Slot就是另一个对象准备好的“回应动作”可以是一个函数用于处理这个事件。传统的C中对象A想通知对象B可能需要持有B的指针直接调用B的方法耦合度很高。QT通过信号与槽实现了松耦合的连接。连接方式如下// 假设有一个按钮指针 btn 和一个标签指针 label QObject::connect(btn, QPushButton::clicked, label, QLabel::clear);这行代码的意思是将btn的clicked()信号连接到label的clear()槽。当按钮被点击标签就会清空。你不需要在按钮的类里包含标签的头文件只需要在连接的时候知道它们的存在即可。为什么这很重要它让代码的模块化程度大大提高。UI逻辑哪个按钮点了和业务逻辑点了之后做什么可以相对分离。这也是QT Designer设计的.ui文件能与C代码优雅结合的基础——通过ui-setupUi(this)一句代码UI文件里定义的控件和它们的信号就能在你的代码类中被访问和连接。3.2 元对象系统QT的“魔法”之源信号与槽、动态属性、运行时类型信息等QT特性都依赖于元对象系统。它通过C的宏如Q_OBJECT、signals:、slots:和moc元对象编译器工具在编译前生成额外的代码来实现。一个关键实践所有包含信号或槽的类都必须在类声明的开头加上Q_OBJECT宏并且这个类必须直接或间接继承自QObject。如果你添加了Q_OBJECT宏后编译出错常见的原因是没有对项目执行qmakeQT的项目构建工具。在QT Creator中右键项目选择“执行qmake”。手动编译时漏掉了moc步骤。通常用CMake或qmake自动管理即可。理解这一点你就明白为什么QT的代码看起来和标准C有些不同也知道了当出现“undefined reference to vtable”这类诡异错误时应该首先检查Q_OBJECT宏和构建步骤。4. 项目实战拆解一个简单的图片查看器光说不练假把式。我们抛开常见的计算器来实现一个稍微复杂一点但更实用的例子一个支持缩放和基本操作的图片查看器。这涉及到文件操作、图形视图框架、事件处理等多个核心概念。4.1 项目创建与界面搭建首先在QT Creator中创建一个Qt Widgets Application项目。在设计师Designer中我们拖放以下控件一个MenuBar菜单栏添加“文件”菜单其下包含“打开”、“退出”动作。一个ToolBar工具栏将“打开”动作拖拽上去方便操作。一个GraphicsView控件QGraphicsView这是显示图片的核心区域将其放在中央。一个StatusBar状态栏用于显示图片路径或状态信息。保存.ui文件后UI框架就搭好了。接下来是重头戏逻辑实现。4.2 核心逻辑用QGraphicsScene和QGraphicsPixmapItem显示图片QGraphicsView本身只是一个视口需要搭配QGraphicsScene场景来管理图形项。我们的图片就是一个QGraphicsPixmapItem像素图项。在主窗口类如MainWindow的头文件中声明必要的成员和槽函数private: Ui::MainWindow *ui; QGraphicsScene *m_scene; // 图形场景 QGraphicsPixmapItem *m_pixmapItem; // 图片项 qreal m_scaleFactor; // 当前缩放因子 private slots: void on_actionOpen_triggered(); // 打开图片的槽在.cpp文件的构造函数中初始化场景MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) , m_scene(new QGraphicsScene(this)) , m_pixmapItem(nullptr) , m_scaleFactor(1.0) { ui-setupUi(this); ui-graphicsView-setScene(m_scene); // 将场景设置给视图 // ... 其他初始化比如连接信号槽 }为什么用QGraphicsView而不是简单的QLabelQLabel也能显示图片但QGraphicsView提供了内置的滚动、缩放通过鼠标滚轮以及更复杂的2D图形项管理能力为我们实现图片查看器提供了更好的基础。4.3 实现图片打开与缩放功能实现“打开”动作的槽函数void MainWindow::on_actionOpen_triggered() { // 弹出文件对话框过滤图片格式 QString fileName QFileDialog::getOpenFileName(this, tr(打开图片), , tr(图片文件 (*.png *.jpg *.bmp *.gif))); if (fileName.isEmpty()) return; QPixmap pixmap(fileName); if (pixmap.isNull()) { QMessageBox::warning(this, tr(错误), tr(无法加载图片文件。)); return; } // 清理旧项添加新项 if (m_pixmapItem) { m_scene-removeItem(m_pixmapItem); delete m_pixmapItem; } m_pixmapItem m_scene-addPixmap(pixmap); m_scene-setSceneRect(m_pixmapItem-boundingRect()); // 让场景大小适应图片 // 重置视图缩放并居中显示 ui-graphicsView-resetTransform(); m_scaleFactor 1.0; ui-graphicsView-centerOn(m_pixmapItem); // 在状态栏显示信息 ui-statusbar-showMessage(fileName); }现在我们已经能打开并显示图片了并且利用QGraphicsView的默认交互已经可以用鼠标滚轮缩放了。但滚轮缩放是以鼠标光标为中心且缩放因子是固定的。如果我们想实现像常见图片查看器那样点击“放大”、“缩小”按钮进行固定比例的缩放或者重置缩放可以添加如下槽函数// 假设我们通过按钮或菜单触发了这些槽 void MainWindow::zoomIn() { m_scaleFactor * 1.2; // 放大1.2倍 ui-graphicsView-scale(1.2, 1.2); } void MainWindow::zoomOut() { m_scaleFactor / 1.2; // 缩小为原来的1/1.2 ui-graphicsView-scale(1/1.2, 1/1.2); } void MainWindow::zoomOriginal() { // 恢复到原始大小先计算需要缩放的倍数再应用 qreal factor 1.0 / m_scaleFactor; ui-graphicsView-scale(factor, factor); m_scaleFactor 1.0; }这里有个关键点QGraphicsView::scale()是累乘的。连续调用scale(1.2, 1.2)两次视图会被放大1.44倍。因此我们需要一个m_scaleFactor变量来跟踪当前的缩放倍数以便实现“重置”功能。4.4 处理鼠标事件实现拖动图片QGraphicsView默认在有滚动条时才能拖动视图。对于全屏显示的图片我们可能希望按住鼠标左键就能拖动。这需要重写视图的鼠标事件。一个更简单的方法是设置视图的拖拽模式// 在显示图片后可以设置 ui-graphicsView-setDragMode(QGraphicsView::ScrollHandDrag);设置此模式后光标在视图上会变成手型按住鼠标左键即可拖动图片体验与主流图片浏览器一致。这是一个QT内置的便捷功能展示了框架的完备性。5. 进阶与避坑那些官方手册不会细说的事当你完成第一个小项目信心满满地开始更复杂的探索时下面这些经验可能会帮你节省大量时间。5.1 多语言支持国际化热词中提到“qt 多语言支持”、“qt 中英文切换”。QT的国际化流程非常规范但步骤繁琐容易出错。标记字符串在所有需要翻译的UI字符串包括tr()函数包裹的代码字符串和Designer中的显示字符串上使用tr()例如setWindowTitle(tr(“My App”))。生成TS文件在项目文件.pro中添加TRANSLATIONS app_zh_CN.ts。然后在QT Creator的“工具-外部-QT语言家-更新翻译”中生成.ts文件。翻译用QT Linguist打开.ts文件逐条翻译并保存。发布QM文件在Linguist中“文件-发布”或使用lrelease命令生成二进制的.qm文件。加载翻译在程序启动时main函数中加载.qm文件。QTranslator translator; if (translator.load(“:/i18n/app_zh_CN.qm”)) { // 假设.qm文件在资源文件中 app.installTranslator(translator); }常见坑点动态创建的字符串比如从网络或数据库读取的无法通过此机制翻译。UI切换语言后需要手动调用ui-retranslateUi(this)来更新界面。5.2 打包发布让程序独立运行“qt发布软件”、“qt打包”是永恒的痛点。在Windows上你需要将程序依赖的QT动态库DLL、平台插件等一起打包。找到依赖最可靠的方法是使用QT自带的命令行工具windeployqt。在构建目录包含你.exe文件的目录打开命令行执行windeployqt your_app.exe。它会自动扫描并复制大部分必需的QT库。补充遗漏windeployqt有时会漏掉一些特定的插件如图像格式插件qjpeg.dll、qgif.dll在plugins/imageformats下。你需要手动检查确保程序在纯净环境中能运行。处理VC运行时如果使用MSVC编译目标机器可能需要安装对应版本的Visual C Redistributable。你可以选择将其合并到安装包中或者要求用户自行安装。使用安装包制作工具最后使用Inno Setup、NSIS等工具将整个文件夹包含exe、dll、插件等制作成安装程序。一个血泪教训永远要在另一台没有QT开发环境的电脑上测试你的发布包这是检验打包是否成功的唯一标准。5.3 第三方库集成以调用MATLAB生成的DLL为例热词中“qt调用matlab生成的dll”是一个典型场景。关键在于理解C与MATLAB编译器通常是mingw或msvc的兼容性以及DLL的调用约定。编译一致性确保你的QT项目使用的编译器如MinGW 64-bit或MSVC 2019 64-bit与生成DLL的MATLAB配置的编译器一致。这是最常出错的地方。头文件和导入库MATLAB生成DLL时通常会同时生成一个.h头文件和一个.libMSVC或.aMinGW导入库。在你的QT项目.pro文件中正确包含头文件路径和库文件路径。# 在.pro文件中示例 INCLUDEPATH “path_to_matlab_dll_headers” LIBS -L”path_to_matlab_dll_libs” -l”your_lib_name” # 注意库名DLL放置将生成的.dll文件以及MATLAB运行时库如果有复制到你的可执行文件同一目录或者系统PATH包含的目录下。函数调用仔细阅读MATLAB生成的头文件注意函数调用约定通常是__stdcall或__cdecl并在QT中正确定义函数指针或声明外部函数。这个过程本质上和调用任何其他C接口的DLL没有区别核心就是编译器匹配和路径配置。6. 调试与问题排查当程序崩溃或不按预期运行时“qt崩溃”是高频搜索词。QT程序崩溃除了常规的C问题空指针、越界还有一些QT特有的场景。6.1 线程线程线程QT的GUI操作必须在主线程也称为GUI线程中进行。如果你在一个工作线程比如QThread中直接操作UI控件例如修改QLabel的文本程序可能会立即崩溃或者出现不可预知的UI错误。正确做法使用信号与槽进行跨线程通信。将工作线程的计算结果通过信号发出连接到主线程中某个UI控件的槽函数上。QT在连接类型为Qt::AutoConnection默认时如果信号和槽在不同线程会自动转换为Qt::QueuedConnection确保槽函数在接收者所在的线程主线程中被调用从而安全更新UI。// 在工作线程类中 emit resultReady(someData); // 在主窗口类中连接 connect(workerThread, WorkerThread::resultReady, this, MainWindow::handleResult);切记QObject及其子类是有线程亲和性的。创建的对象属于创建它的线程。不要在线程间传递或共享UI对象指针。6.2 内存管理父子关系与智能指针QT使用对象树Object Tree来简化内存管理。当一个QObject具有父对象parent时它会在父对象被销毁时自动销毁。这在你创建大量动态控件时非常方便。例如QWidget *container new QWidget; QLabel *label new QLabel(“Hello”, container); // label的parent是container当container被delete时label也会被自动清理。但是如果你手动delete label或者label是在栈上创建的局部变量而container还在就可能造成双重释放或野指针。对于更复杂的场景尤其是涉及跨模块、生命周期管理不清晰的对象结合使用C11的智能指针如std::shared_ptr、std::unique_ptr和QT的对象树需要格外小心所有权问题。一个基本原则是如果对象有明确的、生命周期更长的父对象就使用父子关系否则考虑使用智能指针来管理生命周期。6.3 利用调试输出qDebug()是你的好朋友在复杂逻辑中qDebug()可以输出变量值、函数执行路径等信息是快速定位问题的利器。记得在发布版本中可以通过定义QT_NO_DEBUG_OUTPUT宏来关闭这些调试输出。当程序异常退出时在Windows下可以尝试生成dump文件进行分析或者在Linux下用gdb调试。在QT Creator中配置好调试器如Windows下的CDB或MSVC Debugger可以直接设置断点、单步跟踪观察变量和调用栈这是解决复杂BUG的最有效手段。走到这里你已经跨越了从“安装配置”到“理解核心”再到“完成实战”和“应对进阶问题”的完整路径。QT的学习曲线在开头有点陡但一旦理解了信号槽、元对象系统这些核心思想并熟悉了其生态帮助文档、社区后面的路会越走越宽。剩下的就是结合具体需求图表绘制、网络通信、数据库操作等去深入探索QT各个模块的细节了。记住官方文档永远是第一手资料而实践和踩坑是最好的老师。

相关新闻

SGLang与Nemotron 3.5 Lightning:高性能LLM推理部署实战指南

SGLang与Nemotron 3.5 Lightning:高性能LLM推理部署实战指南

1. 先搞清楚 SGLang 和 Nemotron 3.5 Lightning 到底解决了什么问题 如果你最近在折腾大语言模型(LLM)的推理部署,特别是对高吞吐、低延迟的 API 服务有要求,那么 SGLang 和 NVIDIA Nemotron 3.5 Lightning 这两个名字应该不陌生。…

2026/8/13 5:09:34 阅读更多 →
QT GUI框架入门:从零搭建开发环境到第一个桌面应用

QT GUI框架入门:从零搭建开发环境到第一个桌面应用

1. 项目概述:为什么选择QT作为你的第一门GUI框架如果你是一名C开发者,或者对桌面应用、嵌入式界面开发感兴趣,那么“QT”这个名字你一定不陌生。但面对网络上浩如烟海的教程、复杂的配置问题和层出不穷的版本,很多新手在第一步“入…

2026/8/13 5:09:34 阅读更多 →
IntelliJ IDEA内存优化全攻略:解决卡顿与OutOfMemoryError

IntelliJ IDEA内存优化全攻略:解决卡顿与OutOfMemoryError

1. 项目概述:当Idea开始“卡顿”与“罢工”如果你是一名Java或全栈开发者,IntelliJ IDEA几乎是你绕不开的“吃饭家伙”。它强大、智能,但偶尔也会变得“娇气”——尤其是在处理大型项目、同时打开多个模块,或者运行内存消耗巨大的…

2026/8/13 5:08:33 阅读更多 →

最新新闻

数学建模竞赛机理驱动建模:从物理原理到数值求解的实战指南

数学建模竞赛机理驱动建模:从物理原理到数值求解的实战指南

1. 赛题核心:从“数据驱动”到“机理驱动”的范式跃迁 2025年的全国大学生数学建模竞赛C题,不出意外地再次成为了赛后的焦点话题。作为一名参与过多次建模竞赛指导、也看过无数优秀论文的“老油条”,我今年对C题的感受尤为深刻。如果说前几年…

2026/8/13 6:09:49 阅读更多 →
2024年Android开发从零到一实战指南:Kotlin、MVVM与上架全流程

2024年Android开发从零到一实战指南:Kotlin、MVVM与上架全流程

1. 项目缘起:为什么“从零到一”依然值得写?如果你在2024年还在搜索“Android开发 从零开始”,可能会听到一些声音:市场饱和了、原生开发式微了、Flutter/React Native才是未来。作为一个从EclipseADT时代一路走过来的老码农&…

2026/8/13 6:09:49 阅读更多 →
高通MSM8953平台LCD驱动调试实战:从黑屏到完美显示

高通MSM8953平台LCD驱动调试实战:从黑屏到完美显示

1. 项目概述:从一块“黑屏”开始的征程拿到一块新的LCD屏,接上开发板,上电,屏幕一片漆黑——这大概是每一个嵌入式驱动工程师在调试显示模块时最熟悉的开场白。我手头这个基于高通msm8953平台的项目也不例外。MSM8953,…

2026/8/13 6:09:49 阅读更多 →
GIS四至计算:原理、ArcGIS实现与空间分析应用

GIS四至计算:原理、ArcGIS实现与空间分析应用

1. 四至概念解析与GIS应用场景四至(Extent)是地理信息系统中的基础概念,指的是某个地理区域在东西南北四个方向上的边界坐标。在ArcGIS中,四至数据通常以最小外包矩形(MBR)的形式存储,包含Xmin、…

2026/8/13 6:09:48 阅读更多 →
Windows平台SVN服务器搭建:VisualSVN Server安装配置与权限管理实战

Windows平台SVN服务器搭建:VisualSVN Server安装配置与权限管理实战

1. 项目概述:为什么选择VisualSVN Server?在团队协作开发中,版本控制是基石。虽然Git如今风头正劲,但在某些特定场景下,特别是企业内部管理二进制文件(如设计稿、Office文档、编译后的安装包)或…

2026/8/13 6:09:48 阅读更多 →
重装Win10后Windows Hello失效?深度解析驱动与系统修复方案

重装Win10后Windows Hello失效?深度解析驱动与系统修复方案

1. 项目概述:当Windows Hello“失明”之后刚给老伙计笔记本重装完Win10,系统清爽如新,正想用人脸识别快速登录,却发现那个熟悉的“Windows Hello”设置选项直接灰了,或者干脆告诉你“找不到支持Windows Hello的摄像头”…

2026/8/13 6:08:48 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →