QT入门基础
QT作为一个C++的GUI框架,编程语法和C++都差不多,上手还是比较快的。但是学习一个新的技术,总有一些新的概念是不清楚的,所以需要先了解一下这些概念。
1、QT软件系
- QT:安装时会指定某个版本的QT,这个QT指QT库(类似SDK)
- QT Creator:其实就是IDE,负责代码的编辑、调试、构建等
- Qt Designer:独立的可视化UI设计工具,用于创建.ui文件。有了这个可以手动拖拽进行界面设计。
一般都是QT Designer设计UI界面生成ui文件,然后QT creator作为IDE进行代码编辑开发。如果使用visual studio开发QT,那么就可以不安装QT creator了,而是使用vs作为开发IDE。
2、构建工具
对于一个大型项目,一般的流程如下:
Qt 项目构建流程:
[源代码] ↓
[构建工具 (qmake / CMake)] → 生成 [编译指令] ↓
[编译器 (MSVC / MinGW)] → 生成 [可执行文件]
QT中构建工具有qmake和cmake两种,qmake是官方早期默认的构建工具,其基于.pro文件(即项目配置文件),简单易用适合小型或传统Qt项目。pro文件实例:
QT += core gui widgets # 依赖的 Qt 模块
TARGET = MyApp # 生成的可执行文件名
SOURCES += main.cpp # 源代码文件
HEADERS += myclass.h # 头文件
RESOURCES += res.qrc # Qt 资源文件
CMake构建工具耳熟能详,也已被官方所支持,是现在Qt推荐的构建工具,在Qt6后开始默认支持,CMakeLists.txt示例:
cmake_minimum_required(VERSION 3.16)
project(MyQtApp)# 查找 Qt 6 核心模块
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)# 添加可执行文件
add_executable(MyApp main.cpp)# 链接 Qt 库
target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)# 自动处理 moc、uic、rcc
set_target_properties(MyApp PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON)
切换两种构建工具非常简单,如果直接打开 .pro 文件,Qt Creator 会自动调用 qmake,直接打开 CMakeLists.txt,Qt Creator 会自动识别CMake。
3、编译工具
QT中常用的编译工具有两种:MSVC(Microsoft Visual C++)和MinGW(Minimalist GNU for Windows):
对比项 | MSVC (Microsoft Visual C++) | MinGW (Minimalist GNU for Windows) |
---|---|---|
开发商 | 微软 | GNU社区 |
许可证 | 专有(社区版免费) | 开源(GPL) |
编译器核心 | cl.exe | g++.exe |
运行时库 | MSVCRT.dll | libstdc++/libgcc |
Windows支持 | 深度优化,完全兼容 | 通过MinGW-w64提供支持 |
跨平台性 | 仅限Windows | 支持跨平台代码 |
性能优化 | Windows专属优化 | 通用优化 |
典型用途 | Windows专业软件 | 跨平台工具 |
安装复杂度 | 需安装VS(体积大) | 独立安装(体积小) |
4、开发套件(development kit)
Qt提供了多种构建、编译、调试等工具,选择一种搭配后就形成了所谓的开发套件。所以开发套件(Kit) 就是指一组配置,用于定义如何构建和运行 Qt 项目。它主要包括 Qt 版本、编译器、调试器 等工具的组合。
一套源码可以使用多个开发套件进行编译,所以一个项目也可以有多个开发套件配置。
一个完整的 Qt 开发套件通常包含以下组件:
组件 | 说明 |
---|---|
Qt 版本 | 指定使用的 Qt 库(如 Qt 5.15.2、Qt 6.5.1),不同版本可能支持不同模块。 |
编译器 | 用于编译代码(如 MSVC、MinGW、GCC、Clang)。 |
调试器 | 用于调试程序(如 GDB、CDB、LLDB)。 |
构建工具 | 如 qmake 或 CMake,用于生成 Makefile 或 Ninja 构建文件。 |
目标设备 | 指定运行平台(如 Windows、Linux、Android、嵌入式设备)。 |
【如何查看当前套件选择状态?】
5、安装
了解以上基本信息后,可以参考较为详细的QT安装教程:《【保姆级图文教程】最新Windows系统QT下载、安装、入门、配置VS Qt环境,图文详细、内容充实》进行安装。
安装成功后,可以打开MaintenanceTool(有软件图标或者在安装目标下的MaintenanceTool.exe)重新打开安装管理面板进行组件的添加、删除和升级,或卸载Qt。
在安装目录下的版本号文件夹内,是对于版本Qt的开发套件,Qt 库、头文件、版本特定的工具,总之是一些依赖版本的工具。
而Tools下安装的是一些工具软件,比如CMake、Qt Creator等不依赖具体版本的工具,比如Creator可以管理多个版本的Qt。
6、创建项目
创建项目后,会看到项目的组织结构书:
- *.pro:使用qmake构建系统时的配置文件,包括项目的各种设置内容。
- Headers分许:C++的头文件,默认有一个widget.h时窗口类的头文件
- Sources分组:C++的源文件,默认有widget.cpp窗口类源码和main.cpp主函数源码
- Forms分组:窗体ui文件,默认有一个widget.ui文件。双击ui文件会自动进入QT Designer中可视化设计界面
7、项目的构建、调试和运行
点击左侧Projects扳手图标,会切换到Projects设置界面。
在左侧Build&Run显示了所有的开发套件,选中某个套件的build选项后可以进行设置。在某套件的build设置页面有Shadow build狂,表示构建项目时在项目同级目录下创建一个输出文件夹,文件夹名为套件名+构建模式。这样的好处是使用多个套件build项目时会存放到不同的文件夹。所以只有一个开发套件构建时,则不需要勾选。
【待细节】
8、qmake配置文件
在创建项目时选择qmake构建工具,则项目会默认生成一个qmake的配置文件即.pro文件,qmake的常用配置:
变量 | 含义 |
---|---|
QT | 项目中使用的Qt模块列表 |
CONFIG | 项目的常规配置表,在用到某些模块时需要手动添加 |
DEFINES | 项目中的预处理定义列表,例如可以定义一些用于预处理的宏 |
TEMPLATE | 项目使用的模板,可以是应用程序(app)。如果不设置就默认为应用程序 |
HEADERS | 项目中的头文件(.h文件)列表 |
SOURCES | 项目中的源文件(.cpp文件)列表 |
FORMS | 项目中的UI文件(.ui文件)列表 |
RESOURCES | 项目中的资源文件(.qrc文件)列表 |
TARGET | 项目构建后生成的应用程序的可执行文件名称 |
DESTDIR | 目标可执行文件的存放路径 |
INCLUDEPATH | 项目用到其他头文件的搜索路径列表 |
DEPENDPATH | 项目其他依赖的头文件的搜索路径列表 |
当新添加文件时,qmake会自动更新配置文件,或者右键项目名点击Add Existing Files可以将已存在的文件添加到项目中。
9、main.cpp
作为整个程序的入口,其默认内容如下:
#include "mainwindow.h" // 主窗口头文件(如果是Widgets项目)
#include <QApplication> // Qt应用程序类int main(int argc, char *argv[])
{QApplication a(argc, argv); // 创建Qt应用程序对象MainWindow w; // 创建主窗口对象w.show(); // 显示主窗口return a.exec(); // 进入主事件循环
}
QApplication类是管理整个Qt应用程序的生命周期和系统行为,处理事件循环(如鼠标点击、键盘输入、窗口重绘等)、解析命令行参数(argc, argv)、提供全局设置(如样式表、字体、本地化等)。每个 Qt GUI 程序必须有且只有一个 QApplication 对象(控制台程序用 QCoreApplication)。存活周期从程序启动到退出,贯穿整个运行过程。
MainWindow通常是应用程序的主界面窗口(继承自 QMainWindow),提供菜单栏、工具栏、状态栏等标准界面组件、管理子窗口或控件(如按钮、表格等)、处理用户与界面的交互逻辑等。
在顺序上, Qt的所有 GUI 操作(包括窗口创建、信号槽、样式表等)都依赖 QApplication 初始化底层系统资源,所以MainWindow必须在QApplication之后。其次a.exec()必须在最后,因为这是一个阻塞调用,比如在所有调用结束后再开始。
相关文章:
QT入门基础
QT作为一个C的GUI框架,编程语法和C都差不多,上手还是比较快的。但是学习一个新的技术,总有一些新的概念是不清楚的,所以需要先了解一下这些概念。 1、QT软件系 QT:安装时会指定某个版本的QT,这个QT指QT库…...
【TI MSP430与SD NAND:心电监测的长续航解决方案】
在医疗科技飞速发展的今天,心电监测设备已成为守护人们心脏健康的关键防线。而在这一领域,Nordic、TI、ST、NXP 等行业巨头凭借其深厚的技术积累和创新精神,推出的主芯片与 SD NAND 存储组合方案,正引领着心电监测技术的变革&…...
中医方剂 - 理中汤
理中汤是中医经典方剂,出自《伤寒论》,由人参(或党参)、干姜、白术、炙甘草四味药组成。 一、核心功效与作用机理 1. 温中散寒(核心作用) 表现:脘腹冷痛、呕吐清水、腹泻完谷不化 现代对应&a…...
遨游三防科普:三防平板是什么?有什么特殊功能?
在极端环境作业与专业领域应用中,传统消费级电子设备往往因环境适应性不足而“折戟沉沙”。三防平板的诞生,正是为破解这一难题而生,它通过军用级防护标准与专业化功能设计,成为工业巡检、地质勘探、应急救援等场景的核心工具。所…...
关于数据仓库、数据湖、数据平台、数据中台和湖仓一体的概念和区别
我们谈论数据中台之前, 我们也听到过数据平台、数据仓库、数据湖、湖仓一体的相关概念,它们都与数据有关系,但他们和数据中台有什么样的区别, 下面我们将围绕数据平台、数据仓库、数据湖和数据中台的区别进行介绍。 一、相关概念…...
FPGA:CLB资源以及Verilog编码面积优化技巧
本文将先介绍Kintex-7系列器件的CLB(可配置逻辑块)资源,然后分享在Verilog编码时节省CLB资源的技巧。以下内容基于Kintex-7系列的架构特点,并结合实际设计经验进行阐述。 一、Kintex-7系列器件的CLB资源介绍 Kintex-7系列是Xilin…...
AUTOSAR AP 入门0:AUTOSAR_EXP_PlatformDesign.pdf
AUTOSAR AP官网:AUTOSAR Adaptive Platform设计AUTOSAR AP的目的,翻译版官方文档 AUTOSAR_EXP_PlatformDesign.pdf : https://mp.weixin.qq.com/s?__bizMzg2MzAyMDIzMQ&mid2247553050&idx2&sn786c3a1f153acf99b723bf4c9832acaf …...
WPF 常见坑:ContentControl 不绑定 Content 时,命令为何失效?
WPF 中的 Content“{Binding}” 到底有多重要?一次被忽视的绑定导致命令无法触发的案例分析 在使用 WPF 构建 UI 时,我们经常会使用 ContentControl、ItemsControl、DataTemplate 等机制进行灵活的界面布局。但很多开发者可能会在某些场景中遇到这样的问…...
【IC_Design】跨时钟域的寄存器更新后锁存
目录 设计逻辑框图场景概述总结电路使用注意事项***波形图代码 设计逻辑框图 场景概述 最典型的应用场景就是——在一个时钟域(比如 CPU/总线域)更新了一个多位配置字,需要把它安全地送到另一个时钟域(比如时钟发生器、串口、视频…...
腾讯2025年校招笔试真题手撕(三)
一、题目 今天正在进行赛车车队选拔,每一辆赛车都有一个不可以改变的速度。现在需要选取速度差距在10以内的车队(车队中速度的最大值减去最小值不大于10),用于迎宾。车队的选拔按照的是人越多越好的原则,给出n辆车的速…...
leetcode 83和84 Remove Duplicates from Sorted List 和leetcode 1836
目录 83. Remove Duplicates from Sorted List 82. Remove Duplicates from Sorted List II 1836. Remove Duplicates From an Unsorted Linked List 删除链表中的结点合集 83. Remove Duplicates from Sorted List 代码: /*** Definition for singly-linked l…...
【linux知识】sftp配置免密文件推送
SFTP配置免密文件推送 **一、配置 SFTP 用户****1. 创建系统用户(非登录用户)****2. 设置用户密码****3. 创建 SFTP 根目录并设置权限****4. 配置 SFTP 服务(修改 SSH 配置)****5. 重启 SSH 服务使配置生效** **二、免密 SFTP 文件…...
华为2025年校招笔试手撕真题教程(二)
一、题目 大湾区某城市地铁线路非常密集,乘客很难一眼看出选择哪条线路乘坐比较合适,为了解决这个问题,地铁公司希望你开发一个程序帮助乘客挑选合适的乘坐线路,使得乘坐时间最短,地铁公司可以提供的数据是各相邻站点…...
【Leetcode 每日一题】3362. 零数组变换 III
问题背景 给你一个长度为 n n n 的整数数组 n u m s nums nums 和一个二维数组 q u e r i e s queries queries,其中 q u e r i e s [ i ] [ l i , r i ] queries[i] [l_i, r_i] queries[i][li,ri]。 每一个 q u e r i e s [ i ] queries[i] queries[i]…...
JWT了解
JSON Web Token (JWT) 概述 JSON Web Token (JWT) 是一种开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为JSON对象传输。它通常被用来在客户端和服务器之间传递声明,例如用户的身份验证信息,使得服务端可以…...
复杂项目中通过使用全局变量解决问题的思维方式
最近接手了一个公司的老系统的PHP项目,里面的代码比较混乱,排查解决了一个问题,决定将这个思路记录下来,希望能帮助更多的人。 其中一部分的代码信息如下: 备注:为了避免公司的相关数据信息暴露࿰…...
upload-labs通关笔记-第18关文件上传之条件竞争
目录 一、条件竞争 二、源码分析 1、源码分析 2、攻击原理 3、渗透思路 三、实战渗透 1、构造脚本 2、获取上传脚本URL 3、构造访问母狼脚本的Python代码 4、bp不断并发上传母狼脚本 (1)开启专业版bp (2) 上传母狼脚本…...
华为Cangjie编程技术深度解析(续篇1)
华为Cangjie编程技术深度解析(续篇) 第六章 分布式运行时深度剖析 6.1 设备虚拟化引擎 Cangjie设备抽象层(DAL)原理 // 设备能力声明式描述 @DeviceProfile(id = "AGV-0023",capabilities = {mobility: { speed: 1.5m/s, payload: 50kg },sensors: [lidar, t…...
WordPress AI插件 新增支持一键批量自动生成WooCommerce 产品描述、产品图、产品评论
Linkreate wordpressAI智能插件-自动化运营网站 文章生成与优化|多语言文章生成|关键词生成与分类管理|内容采集与管理|定时任务与自动|多任务后台运行|API集成与AI客服|媒体生成功能 一款可以24小时自动发布原创文章的WordPress插件,支持AI根据已有的长尾关键词、关…...
如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞
在当今的Web应用安全领域,JSON Web Token(JWT)已成为身份认证的主流方案,但OWASP统计显示,错误配置的JWT导致的安全事件占比高达42%。本文将系统性地介绍JWT安全测试的方法论,通过真实案例剖析典型漏洞,帮助我们构建全…...
华为昇腾开发——多模型资源管理(C++)
使用ACLLite进行多模型资源管理(C++实现) 在使用Ascend ACL(Ascend Computing Language)的ACLLite库进行多模型推理时,合理的资源管理至关重要。以下是如何在C++中实现多模型资源管理的方案: 1. 资源管理基础 首先,我们需要理解Ascend平台的关键资源: 设备(Device)资…...
【开源解析】基于深度学习的双色球预测系统:从数据获取到可视化分析
基于深度学习的双色球预测系统:从数据获取到可视化分析 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。…...
【RAG】ragflow源码亮点:文档embedding向量化加权融合
引言: 最近在看ragflow源码,其中有一个较为巧妙地设计:分别将 文字 、 标题 行向量化 之后,直接根据权重,进行加法运算,得到向量融合,增强了文本向量化的表示能力,这里开始讨论一下…...
vue3+element-plus+pinia完整搭建好看简洁的管理后台
目录 一、项目介绍 二、项目结构 1.vscode的项目截图 2.项目依赖 三、项目截图 1.登录页 2.首页 3.汽车管理 4.汽车信息 5.系统管理 6.订单管理 7.数据统计 8.个人中心 四、源码分析 1.数据存储与同步 2.汽车信息 3.框架布局 五、总结 一、项目介绍 项目使用…...
新手到资深的Java开发编码规范
新手到资深的开发编码规范 一、前言二、命名规范:代码的 “第一印象”2.1 标识符命名原则2.2 命名的 “自描述性” 原则2.3 避免魔法值 三、代码格式规范:结构清晰的视觉美学3.1 缩进与空格3.2 代码块规范3.3 换行与断行 四、注释规范:代码的…...
Docker架构详解
一,Docker的四大要素:Dockerfile、镜像(image)、容器(container)、仓库(repository) 1.dockerfile:在dockerfile文件中写构建docker的命令,通过dockerbuild构建image 2.镜像:就是一个只读的模板,镜像可以用来创建docker容器&…...
VS Code中Maven未能正确读取`settings.xml`中配置的新路径
在VS Code中Maven未能正确读取settings.xml中配置的新路径,通常是由于以下原因导致的: 一、VS Code未使用你修改的settings.xml文件 VS Code的Maven插件可能使用了默认配置或指向其他settings.xml文件。解决方法: 手动指定settings.xml路径…...
Spring Boot 注解 @ConditionalOnMissingBean是什么
一句话总结: ConditionalOnMissingBean 是 Spring Boot 提供的一个 条件注解(Conditional Annotation),意思是: 只有当 Spring 容器中 不存在 某个 Bean 时,当前的 Bean 或配置才会被加载。 这是一种典型的…...
labview实现LED流水灯的第二种方法
LED流水灯的描述:写一个跑马灯程序,7个灯从左到右不停的轮流点亮,闪烁间隔由滑动条调节,并尝试拓展到任意个LED灯。 在前面的文章中,我们提到了使用labview实现LED流水灯的第一种方法。这篇文章来介绍一下实现LED流水灯的第二种方…...
Katoolin3 项目介绍:在 Ubuntu 上轻松安装 Kali Linux 工具
引言 在网络安全和渗透测试领域,Kali Linux 以其丰富的工具集成为首选操作系统。然而,Kali Linux 作为一个专为安全研究设计的系统,可能不适合日常使用或服务器环境(如 Ubuntu VPS)。Katoolin3 是一个强大的 Python 脚…...
labview设计一个虚拟信号发生器
目标:设计一个虚拟信号发生器,通过功能键的设置可以产生正弦波、三角波、方波和锯齿波,并可以通过输入控件设置采集信号的频率、幅值、相位等参数。 一、正弦波 (1)创建一个枚举 (2)点击属性后…...
java I/O
文件字符流 字符流不同于字节,字符流是以一个具体的字符进行读取,因此它只适合读纯文本的文件,如果是其他类型的文件不适用。 字节流;英文1个字节,中文3个字节。 字符流:中英文都是2个字节 public static…...
机器学习第二十三讲:CNN → 用放大镜局部观察图片特征层层传递
机器学习第二十三讲:CNN → 用放大镜局部观察图片特征层层传递 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南 CNN详…...
webpack构建速度和打包体积优化方案
一、分析工具 1.1 webpack-bundle-analyzer 生成 stats.json 文件 打包命令webpack --config webpack.config.js --json > stats.json使用 webpack-bundle-analyzer 插件const BundleAnalyzerPlugin = require(webpack-bundle-analyzer).BundleAnalyzerPlugin; plugins: […...
RabbitMQ可靠传输——持久性、发送方确认
一、持久性 前面学习消息确认机制时,是为了保证Broker到消费者直接的可靠传输的,但是如果是Broker出现问题(如停止服务),如何保证消息可靠性?对此,RabbitMQ提供了持久化功能: 持久…...
《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》
《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》 一、引言 在当今数字化的时代背景下,Linux操作系统凭借其卓越的性能、可靠性和开源的优势,在服务器、云计算、嵌入式系统等众多领域占据着举足轻重的地位。对于IT运维…...
关于大语言模型的问答?
1.Why is prompt(提示词) engineering necessary when working with large language models (LLMs)? 答:Despite LLMs are powerful and versatile, they could still generate texts that are too generic, hallucinated, irrelevant, or …...
大模型应对大风等极端天气的卓越效果及其在能源预测中的特殊价值
引言 近年来,全球气候变化加剧,极端天气事件频发,尤其是大风天气的强度和频率显著增加。这不仅对电网安全运行带来挑战,也对风电场的发电效率、设备安全和收益稳定性造成影响。传统的气象预测和能源管理方法已难以满足高精度、实时响应的需求。而基于人工智能(AI)的大模…...
【web应用】vue3前端框架怎么修改logo?
菜单栏logo修改:src/assets/logo中的图片替换 浏览器栏目logo修改:public文件夹中的icon文件替换...
【Windows】FFmpeg安装教程
FFmpeg 下载与安装指南 下载 FFmpeg 访问 FFmpeg 官网点击页面上的 “Download” 按钮进入下载页面 配置环境变量 将 FFmpeg 的 bin 目录添加到系统环境变量 PATH 中 验证安装 打开 PowerShell输入命令 ffmpeg -version若显示版本信息,则表明安装成功 视频格式检…...
阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
MCP 为资源访问和 Multi Agent 互操作提供了标准化的可能。开源社区目前对 MCP 的生态建设非常火热,mcp.so 已经提供了近 1 万的 mcp server ,其他各种 MCP 生态组件更是层出不穷。AI 大厂们积极拥抱 MCP ,并纷纷提供了自己的 MCP server。对…...
基于阿里云DashScope API构建智能对话指南
背景 公司想对接AI智能体,用于客服系统,经过调研和实施,觉得DashScope 符合需求。 阿里云推出的DashScope灵积模型服务为开发者提供了便捷高效的大模型接入方案。本文将详细介绍如何基于DashScope API构建一个功能完善的智能对话系统&#x…...
RK3588 RGA 测试
RK3588 RGA 测试 一、数据分析总结【由LLM生成】二、考链接三、测试数据四、测试过程4.1 编译librga SDK4.2 运行自带的测试4.3 生成`Resize`测试程序4.4 运行`Resize`测试4.5 遇到的错误一、数据分析总结【由LLM生成】 本次测试针对不同的源图像尺寸、目标图像尺寸和缩放算法…...
【机器学习】集成学习算法及实现过程
一、学习目标 了解什么是集成学习了解机器学习中的两个核⼼任务理解Bagging集成原理理解随机森林构造过程掌握RandomForestClassifier的使⽤掌握boosting集成原理和实现过程理解bagging和boosting集成的区别理解AdaBoost集成原理理解GBDT的算法原理 二、集成学习算法简介 2.…...
Vue:axios(GET请求)
基础 GET 请求 axios.get(https://api.example.com/data).then(response > {console.log(响应数据:, response.data);}).catch(error > {console.error(请求失败:, error);});参数传递方式 axios.get(/api/search, {params: {keyword: vue,page: 1,sort: desc} });// 实…...
iOS工厂模式
iOS工厂模式 文章目录 iOS工厂模式简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)三种模式对比 简单工厂模式(Simple Factory) 定义&am…...
GitHub 趋势日报 (2025年05月21日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1microsoft/WSLLinux的Windows子系统⭐ 1731⭐ 25184C2virattt/ai-hedge-fundA…...
iOS 直播弹幕功能的实现
实现iOS直播弹幕功能需要考虑多个方面,包括弹幕的显示、管理、动画效果以及与直播流的同步。 核心实现方案 1. 弹幕显示视图 class BarrageView: UIView {// 弹道(轨道)数组private var tracks: [CALayer] []// 正在显示的弹幕数组 private var displayingBarra…...
借助Azure AI Foundry 如何打造语音交互新体验
在刚刚落幕的微软创想未来峰会上,Contoso 智能家居的现场演示引发了热议。许多观众在会后留言询问如何回看这场精彩演示。今天,微软为您揭秘 Contoso 如何借助微软最新技术实现智能家居的飞跃式创新。 当语音遇上智能体:用户体验焕然一新 如…...
Spring开发系统时如何实现上传和下载文件
代码如下 值得注意的是上传时候不需要参数servletRequest而下载时候却需要servletResponse,这是为什么呢? 这是因为文件上传时,客户端通过 HTTP POST 请求将文件数据放在 请求体(Body) 中。Spring MVC 对上传过程进行…...