【Qt】初识Qt
文章目录
- 认识 Qt Creator 界面
- 左边栏
- 代码编辑区
- UI设计界面
- 构建区
- Qt Hello World 程序
- 使用 "按钮" 实现
- 纯代码方式实现
- 可视化操作实现
- 使用 "标签" 实现
- 存代码实现
- 可视化操作实现
- 项目文件解析
- .pro 文件解析
- widget.h 文件解析
- main.cpp 文件解析
- widget.cpp 文件解析
- widget.ui 文件解析
- 使用帮助文档
- 认识对象模型(对象树)
- 代码示例
- Qt 窗口坐标体系
认识 Qt Creator 界面
左边栏
在编辑模式下,左边竖排的两个窗口被称作“边栏”。其中,①是项目文件管理窗口,②是打开文件列表窗口。
在Qt Creator的菜单中,选择“控件” -------> “Show Left Sidebar”,或者使用快捷键“Alt + 0”,就能控制边栏的显示与隐藏。
边栏中的窗口数量可以增加,边栏子窗口标题栏有一排小按钮,最右边的是关闭按钮,倒数第二个是增加分栏按钮,通过它可以添加多个边栏子窗口。
边栏子窗口标题栏第一个控件是组合框,可以选择该子窗口的功能视图类型,目前可以选择 8 个视图类型:
视图类型 | 说明 |
---|---|
项目 | 即项目文件管理视图,可以选择项目里的文件进行编辑,包括 pro 文件也可以手动编辑。 |
打开文档 | 当前已经打开的文件列表,文件名右边如果有 * 号,是该文件被修改了但尚未保存。 |
书签 | 右击代码编辑器行号位置,看到 “切换书签”,可以给代码行添加书签,方便跳转到该位置。 |
文件系统 | 相当于系统里的文件资源管理器,可以查看项目文件夹在磁盘里的实际文件列表。 |
类视图 | 可以查看项目里包含的类及相应源代码文件里的成员函数、成员变量。 |
Git Branches | 查看当前分支 |
大纲 | 编辑器所显示的当前文件的大纲列表,如名字空间、类名、成员函数、成员变量等。 |
Test | 测试 |
类型层次 | 当前项目包含的类及其基类、派生类列表 |
Include Hierarchy | 包含视图,显示当前项目里 .h 、.cpp 以及 Qt 类库头文件之间的包含关系。 |
代码编辑区
①和②:导航按钮“返回”和“前进”,这与网页浏览器的前进和后退按钮类似,可以在之前浏览的多个代码文件或一个代码文件里多个位置之间快速切换。
③:标识当前显示的文件是只读还是可写,一般都是可写的。
④:文件类型图标,显示当前文件的类型,这个控件其实是一个菜单按钮,点击可以弹出丰富的文件处理功能菜单。
⑤:打开的文件名,可以在多个打开的文件之间选择切换,与边栏的“打开文档”视图相对应。
⑥:关闭当前显示的文档。
⑦:为当前显示的文件添加额外的C++预处理指令,一般用不到。
⑧:选择符号,可以在当前显示的文件里多个函数、类、成员变量等之间快速切换,与边栏“大纲”视图相对应。
⑨:编辑区光标的行号和列号。
⑩:代码编辑区分栏,可以增加多个编辑器窗口,显示多个打开的文档或显示较大源码文件的多个位置。
行首区:主要用来显示代码行号,以及调试断点标志和代码书签标志。右击行首区可以弹出右键菜单,菜单里可以切换书签、编辑书签以及设置或取消断点。
同一行既可以打断点也可以设置书签,二者并不冲突,实际上它们没有关联。单击行号前面的浅灰色空白区可以直接打断点,再次单击可以取消断点,另外也可以用快捷键F9设置或取消断点。代码书签一般通过右键菜单来设置,也可以用快捷键Ctrl+M设置或取消书签。
编辑区:写代码的区域。
UI设计界面
双击 widget.ui 文件,Qt Creator 会自动进入设计模式,可以对图形界面进行可视化编辑:
①:组件选择窗口。组件选择窗口分为多个组,如Layouts、Buttons、Display Widgets等,界面设计的常见组件都可以在组件选择窗口中找到。
②:UI设计窗口。如果要将某个组件放置到该窗口上时,从组件选择窗口上拖放一个组件到窗体上即可。
③:动作编辑窗口。动作编辑窗口包括Action Editor以及Signals和Slots编辑器。Action Editor主要是用来新建Action,并且通过拖拽的动作,将新建好的Action添加到菜单栏和工具栏上;Signals和Slots编辑器用于可视化地进行信号与槽的关联。
④:对象浏览窗口。用树状视图显示窗体上各组件之间的布局包含关系,视图有两列,显示每个组件的对象名称(ObjectName)和类名称。
⑤:属性设置窗口。显示某个选中的组件或窗体的各种属性及其取值,可以在属性设置窗口里修改这些属性的值。
构建区
左下角一共有四个按钮,下面分别介绍一下:
- 第一个按钮是选择构建项目使用的 Qt 套件和构建目标程序的类型(Debug 或 Release)。对于第一个按钮,默认的是Debug,构建的是 Debug 类型的目标程序。如果需要构建 Release 版目标程序,点开左下角第一个按钮:
这里有三种构建模式:
模式 | 说明 |
---|---|
Debug | 以 “-g” 模式编译,带着符号信息,优点是便于调试 |
Profile | profile 则是在 “Debug” 和 “Release” 之间取⼀个平衡,兼顾性能和调试,可以类似的看做是性能更优又方便调试的版本。 |
Release | “Release” 是经过优化之后,性能比 “Debug” 更上一个档次 |
上图是针对项目只用到单一 Qt 套件的,如果之前配置了多个 Qt 套件,看到的类似下图:
如果项目配置了多个可用的Qt套件,点开左下角第一个按钮后,会看到各个套件以及构建类型。如果要切换Qt套件或构建类型,直接选中相应条目,然后点击运行按钮即可。如果构建和运行时没有出错,就会显示出构建好的目标程序界面。
- 第二个是运行按钮,快捷键是Ctrl+R。如果还没构建项目或刚修改了代码,直接点击运行的话,Qt Creator会自动构建生成新的目标程序并运行。
- 第三个是调试按钮,快捷键是F5。调试程序之前,Qt Creator会自动构建生成最新的目标程序,并进入调试模式。
- 第四个是构建按钮,快捷键是Ctrl+B,只构建最新的目标程序,但不运行。
Qt Hello World 程序
使用 “按钮” 实现
纯代码方式实现
可视化操作实现
(1)双击:" widget.ui " 文件;
(2) 拖拽控件至 ui 界面窗口并修改内容;
使用 “标签” 实现
存代码实现
可视化操作实现
项目文件解析
.pro 文件解析
工程新建好之后,在工程目录列表中有一个后缀为 “.pro” 的文件, “.pro” 文件就是工程文件 (project),它是 qmake
自动生成的用于生产 makefile
的配置文件。如图所示:
QT += core gui // Qt 包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于 Qt4 版本才包含 widget 模块
TARGET = QtFirst //应用程序名生成的 .exe 程序名称
TEMPLATE = app //模板类型,应用程序模板
SOURCES += \ main.cpp\widget.cpp // 源文件
HEADERS += \widget.h //头文件
.pro
文件的写法如下:
- 注释:从
#
开始,到这一行结束。 QT += core gui
// Qt 包含的模块 Qt5 包含的模块如下图所示:
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
这条语句的含义是,如果QT_MAJOR_VERSION
大于 4 也就是当前使用的 Qt5 及更高版本) 需要增加 widgets 模块。如果项目仅需支持 Qt5 , 也可以直接添加QT += widgets
一句。不过为了保持代码兼容 ,最好还是按照 QtCreator 生成的语句编写。- 指定生成的应用程序名:
TARGET = QtDemo
TEMPLATE = app //模板
。告诉 qmake 为这个应用程序生成哪种 makefile。下面是可供选择的模板:app
:建立一个应用程序的 makefile。这是默认值,所以如果模板没有被指定,这个将被使用。lib
:建立一个库的makefile
。vcapp:
建立一个应用程序的VisualStudio
项目文件。vclib
: 建立一个库的VisualStudio
项目文件。subdirs
:这是一个特殊的模板,它可以创建一个能够进入特定目录的makefile
并且为它调用make
的makefile
。
- 工程中包含的源文件:
SOURCES += main.cpp/widget.cpp
- 工程中包含的头文件:
HEADERS += widget.h
- 工程中包含的资源文件:
RESOURCES += painter.qrc
- 工程中包含的
ui
设计文件:FORMS += widget.ui
- 配置信息:
CONFIG += c++11
(使用 c++11 的特性) CONFIG 用来告诉qmake
关于应用程序的配置信息。
widget.h 文件解析
main.cpp 文件解析
使用 Qt Creator
新建任意工程之后,main.cpp
文件中都会自动生成如下代码:
QApplication
为应用程序类;QApplication a
;(a为应用程序对象,有且仅有一个。)QApplication
管理图形用户界面应用程序的控制流和主要设置。QApplication
是 Qt 的整个后台管理的命脉。它包含主事件循环,在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。- 对于任何一个使用 Qt 的图形用户界面应用程序,都正好存在一个 QApplication 对象,而不论这个应用程序在同一时间内是不是有 0、1、2 或更多个窗口。
myWidget w
: 实例化窗口对象w.show()
: 调用show函数显示窗口a.exec()
:程序进入消息循环,等待对用户输入进行响应。这里 main()把控制权转交给Qt,Qt 完成事件处理工作,当应用程序退出的时候 exec() 的值就会返回。在exec()
中,Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。
widget.cpp 文件解析
widget.ui 文件解析
widget.ui
是窗体界面定义文件,是一个 XML 文件,定义了窗口上的所有组件的属性设置、布局,及其信号与槽函数的关联等。用 UI 设计器可视化设计的界面都由 Qt 自动解析,并以 XML 文件的形式保存下来。在设计界面时,只需在 UI 设计器里进行可视化设计即可,而不用管 widget.ui
文件是怎么生成的。
使用帮助文档
打开帮助文档有三种方式. 实际编程中使用哪种都可以.
1、光标放到要查询的类名/方法名上, 直接按 F1
2、Qt Creator 左侧边栏中直接用鼠标单击 “帮助” 按钮:
点击 “帮助” 之后,出现如下图示界面:
3、找到 Qt Creator 的安装路径,在 “bin” 文件夹下找到 assistant.exe
,双击打开;
使用示例
- 新建项目,在新建的项目中使用 Qt 中的
QpushButton
控件。 - 打开帮助手册,在 “索引” 里面输入
QpushButton
;
认识对象模型(对象树)
在 Qt 中创建很多对象的时候会提供一个 parent
对象指针,下面来解释这个 parent
到底是干什么的。
-
QObject
是以对象树的形式组织起来的。- 当创建一个
QObject
对象时,会看到QObject
的构造函数接收一个QObject
指针作为参数,这个参数就是parent
,也就是父对象指针。 - 这相当于,在创建
QObject
对象时,可以提供一个其父对象,我们创建的这个QObject
对象会自动添加到其父对象的children()
列表。 - 当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)
- 这种机制在 GUI 程序设计中相当有用。例如,一个按钮有一个 QShortcut(快捷键)对象作为其
子对象。当删除按钮的时候,这个快捷键理应被删除。这是合理的。
- 当创建一个
-
QWidget
是能够在屏幕上显示的一切组件的父类。QWidget
继承自QObject
,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件。因此,它会显示在父组件的坐标系统中,被父组件的边界剪裁。例如,当用户关闭一个对话框的时候,应用程序将其删除,那么,我们希望属于这个对话框的按钮、图标等应该一起被删除。事实就是如此,因为这些都是对话框的子组件。- 当然,我们也可以自己删除子对象,它们会自动从其父对象列表中删除。比如,当我们删除了一个工具栏时,其所在的主窗口会自动将该工具栏从其子对象列表中删除,并且自动调整屏幕显示。
Qt 引入对象树的概念,在一定程度上解决了内存问题。
- 当一个
QObject
对象在堆上创建的时候,Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。 - 任何对象树中的
QObject
对象delete
的时候,如果这个对象有parent
,则自动将其从parent
的children()
列表中删除;如果有孩子,则自动delete
每一个孩子。Qt 保证没有QObject
会被delete
两次,这是由析构顺序决定的。
如果 QObject
在栈上创建,Qt 保持同样的行为。正常情况下,这也不会发生什么问题。来看下面的代码片段:
作为父组件的 window
和作为子组件的 quit
都是 QObject
的子类(事实上,它们都是 QWidget
的子类,而 QWidget
是 QObject
的子类)。这段代码是正确的,quit
的析构函数不会被调用两次,因为标准 C++ 要求,局部对象的析构顺序应该按照其创建顺序的相反过程。因此,这段代码在超出作用域时,会先调用 quit
的析构函数,将其从父对象 window
的子对象列表中删除,然后才会再调用 window
的析构函数。
但是,如果我们使用下面的代码:
情况又有所不同,析构顺序就有了问题。我们看到,在上面的代码中,作为父对象的 window
会首先被析构,因为它是最后一个创建的对象。在析构过程中,它会调用子对象列表中每一个对象的析构函数,也就是说, quit
此时就被析构了。然后,代码继续执行,在 window
析构之后,quit
也会被析构,因为 quit
也是一个局部变量,在超出作用域的时候当然也需要析构。但是,这时候已经是第二次调用 quit
的析构函数了,C++ 不允许调用两次析构函数,因此,程序崩溃了。
由此我们看到,Qt 的对象树机制虽然在一定程度上解决了内存问题,但是也引入了一些值得注意的事情。这些细节在今后的开发过程中很可能时不时跳出来烦扰一下,所以,我们最好从开始就养成良好习惯
⭐️:在 Qt 中,尽量在构造的时候就指定 parent
对象,并且大胆在堆上创建。
Qt 对象树如图:
代码示例
1、创建一个新工程并编译运行,生成如下窗口;
2、选中工程名,鼠标右键 -------> add new...
(或 “添加新文件” )
3、选择 choose...
,弹出如下界面;
4、点击 “下一步”,弹出如下对话框
5、点击 “完成” 之后,手动创建类的头文件以及源文件会自动添加到目标工程中;
6、修改头文件;
7、编写源文件;
8、编译并运行;
9、当关闭弹出的对话框时,就会自动调用按钮的析构函数;
10、观察析构函数的执行顺序;
11、执行结果:
12、执行结果分析:
- 对象树确保的是先释放子节点的内存, 后释放父节点的内存.
- 而析构函数的调用顺序则不一定遵守上述要求. 因此看到子节点的析构执行顺序反而在父节点析构顺序之后.
Qt 窗口坐标体系
坐标体系:以左上角为原点(0,0),X向右增加,Y向下增加。
对于嵌套窗口,其坐标是相对于父窗口来说的。
示例:使用Qt中的坐标系设置控件的位置;
运行结果如下图示:
相关文章:
【Qt】初识Qt
文章目录 认识 Qt Creator 界面左边栏代码编辑区UI设计界面构建区 Qt Hello World 程序使用 "按钮" 实现纯代码方式实现可视化操作实现 使用 "标签" 实现存代码实现 可视化操作实现 项目文件解析.pro 文件解析widget.h 文件解析main.cpp 文件解析widget.cp…...
Python----机器学习(逻辑回归与二分类问题)
一、原理 逻辑回归是一种用于解决二分类问题的机器学习算法。其原理基于线性回归 模型,通过使用逻辑函数(也称为sigmoid函数)将线性回归的结果映射到 一个0到1之间的概率值,从而进行分类。 在实际生活中,通常一件事的结…...
YOLOv2 性能评估与对比分析详解
1. YOLOv2 简介 YOLOv2(You Only Look Once v2),也称为 YOLO9000,是 2016 年发布的目标检测模型,旨在改进 YOLOv1 的速度和准确性。它通过引入批量归一化、锚框和高分辨率输入等技术,显著提升了性能。YOLO…...
Java文件批量复制工具实现解析
目录 引言 1、需求背景 2、实现原理 3、实现步骤 3.1 路径预处理 3.2 复制路径解析 3.3 递归复制逻辑 4、测试用例 5、总结 引言 在项目开发中,文件复制操作是常见的需求场景。本文将解析一个基于Java NIO实现的文件批量复制工具,该工具支持多路径批量操作、目录递归…...
uniapp小程序位置授权弹框与隐私协议耦合(合而为一)(只在真机上有用,模拟器会分开弹 )
注意: 只在真机上有用,模拟器会分开弹 效果图: 模拟器效果图(授权框跟隐私政策会分开弹,先弹隐私政策,同意再弹授权弹框): manifest-template.json配置( "__usePr…...
深入理解 Java 内存区域与内存溢出异常
个人主页 文章专栏 文章目录 一、引言二、Java 运行时数据区域(一)程序计数器(二)Java 虚拟机栈(三)本地方法栈(四)Java 堆(五)方法区(六…...
算法复习(二分+离散化+快速排序+归并排序+树状数组)
一、二分算法 二分算法,堪称算法世界中的高效查找利器,其核心思想在于利用数据的有序性,通过不断将查找区间减半,快速定位目标元素或满足特定条件的位置。 1. 普通二分 普通二分适用于在有序数组中查找特定元素的位置。我们可以…...
4.15 代码随想录第四十四天打卡
99. 岛屿数量(深搜) (1)题目描述: (2)解题思路: #include <iostream> #include <vector> using namespace std;int dir[4][2] {0, 1, 1, 0, -1, 0, 0, -1}; // 四个方向 void dfs(const vector<vector<int>>& grid, vector<vector<bool&g…...
Apache HTTPD 换行解析漏洞
漏洞介绍 CVE-2017-15715 Apache HTTPD 是一个广泛使用的 HTTP 服务器,可以通过 mod_php 模块来运行 PHP 网页。在其 2.4.0 到 2.4.29 版本中存在一个解析漏洞,当文件名以 1.php\x0A 结尾时,该文件会被按照 PHP 文件进行解析,这…...
Spark-SQL(二)
一. 利用IDEA开发Spark-SQL 1 在pop.xml中添加spark-sql依赖 2 spark-sql测试代码 1)在idea中读取json文件创建DataFrame 2)SQL风格语法 3 )DSL风格语法 4) RDD转换成DataFrame,DataFrame转换成DataSet 5&#x…...
Node.js 操作 MySQL 数据库
环境检查 Node.js 环境验证 node -v # 确认版本 ≥14.x npm -v # 确认能正常输出 MySQL 服务检查 # Linux systemctl status mysql# Windows (CMD) sc query MySQL 数据库与表创建 创建数据库 CREATE DATABASE users CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode…...
linux运维篇-Ubuntu(debian)系操作系统创建源仓库
适用范围 适用于Ubuntu(Debian)及其衍生版本的linux系统 例如,国产化操作系统kylin-desktop-v10 简介 先来看下我们需要创建出来的仓库目录结构 Deb_conf_test apt源的主目录 conf 配置文件存放目录 conf目录下存放两个配置文件&…...
从“数据孤岛”到“万物互联”,PLC组网重构工控边界
在工业自动化领域,PLC作为现代智能制造的核心控制单元,其应用已从单一设备的逻辑控制延伸至全厂级生产系统的协同管理。作为工业自动化系统的控制核心,PLC不仅需要实现设备层级的操控,更要通过工业通信网络构建起设备间的数据交互…...
【ISP】AWB的基本原理介绍(基于灰度像素检测)
🎨 基于灰度像素检测的自动白平衡(AWB)算法原理与实现 在图像处理中,自动白平衡(AWB, Auto White Balance)是调整图像色温、还原真实色彩的关键算法之一。本文介绍一种经典实用的 AWB 方法 —— 基于灰度像…...
uniappx项目上架各手机平台
前段时间用uniappx开发的App,领导要求要在各个主要手机平台上上架了,本来不是我的任务,后来其他人没有空交给我了,上架小白一枚,哭唧唧的自己研究吧,根据领导发的账号密码登录各个平台上架,花费…...
DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案
DIB:Drone in Box- 室内外场景无人机无人化自主巡检技术方案 作为大疆机场3的无人机无人化巡检方案的补充三个自主巡检方案: 方案一、M350AIBOX自主机场-适合室外无人机自主巡检 方案二、M4AIBOX自主机场-适合室内自主巡检 方案三、停机坪AIBOX 自主巡…...
【大模型】GPT-4、DeepSeek应用与Prompt使用技巧
GPT-4 作为目前最先进的大语言模型之一,在多个领域都有广泛的应用。以下是一些典型的应用实例以及相关的 Prompt 使用技巧,帮助你更好地发挥 GPT-4 的潜力。 一、GPT-4 应用实例 1. 内容创作 博客/文章写作:生成高质量的技术博客、营销文案、…...
《分布式软总线:不同频段Wi-Fi环境下设备发现兼容性难题》
分布式软总线技术作为实现设备互联互通的关键,正逐渐成为构建万物互联世界的基石。然而,当分布式软总线面临不同频段Wi-Fi环境时,设备发现的兼容性问题成为了阻碍其广泛应用的一大挑战。这一问题不仅影响着用户体验,也制约着分布式…...
微电网与分布式能源:智能配电技术的场景化落地
安科瑞顾强 随着数字化转型与能源革命的加速推进,电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力,正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…...
Flutter实战(1)-- 调试工具
Flutter实战调试篇:从开发到上线的完整指南 工欲善其事,必先利其器。 本文使用的Flutter的相关版本信息: Flutter 1.19.0-4.3.pre • channel beta Engine • revision 9a28c3bcf4 Tools • Dart 2.9.0 (build 2.9.0-14.1.beta) 本文是Flutte…...
每日算法(双指针算法)(Day 1)
双指针算法 1.算法题目(移动零)2.讲解算法原理3.编写代码 1.算法题目(移动零) 2.讲解算法原理 数组划分,数组分块(快排里面最核心的一步)只需把0改为tmp 双指针算法:利用数组下标来…...
无人机的群体协同与集群控制技术要点!
一、技术要点 通信技术 高效可靠的通信链路:无人机集群需要稳定、低延迟的通信网络,以实现实时数据传输和指令交互。通信方式包括无线自组织网络(Ad Hoc)、蜂窝网络、卫星通信等,需根据任务场景选择合适的通信技术。…...
Linux常见指令介绍上(入门级)
1. ls指令 功能:显示出当前目录下的所有子目录与文件。 PS:注意显示的是当前文件下的子目录与文件。 以下这些是可以和ls配套使用的一些选项 -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d 将目录象文件一样显示,而不是显示其下…...
【Linux系统篇】:从匿名管道到命名管道--如何理解进程通信中的管道?
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨ 文章所属专栏:Linux篇–CSDN博客 文章目录 一.进程通信进程通信概念进程通信目的进程通信分类 二.管道匿名…...
三、The C in C++
第三章主要讲解了 C 中继承自 C 语言的核心元素,包括函数创建、执行控制、操作符、数据类型、作用域、存储指示、复合类型创建等。 3.1 创建函数(Creating Functions) C允许函数重载,同名的函数可以根据参数类型和数量区分&…...
探索图像分类模型的 Flask 应用搭建之旅
最近深入研究了利用深度学习模型进行图像分类,并将其部署到 Flask 应用中的项目,过程中遇到了不少挑战,也收获了满满的知识,迫不及待想和大家分享一下。 一、项目背景与目标 在当今数字化的时代,图像数据呈爆炸式增长…...
OpenAI发布GPT-4.1系列模型——开发者可免费使用
OpenAI刚刚推出GPT-4.1模型家族,包含GPT-4.1、GPT-4.1 Mini和GPT-4.1 Nano三款模型。重点是——现在全部免费开放! 虽然技术升级值得关注,但真正具有变革意义的是开发者能通过Cursor、Windsurf和GitHub Copilot等平台立即免费调用这些模型。…...
自动化测试工具playwright中文文档-------14.Chrome 插件
介绍 注意 插件仅在以持久化上下文启动的 Chrome/Chromium 浏览器中工作。请谨慎使用自定义浏览器参数,因为其中一些可能会破坏 Playwright 的功能。 以下是获取位于 ./my-extension 的 Manifest v2 插件背景页面句柄的代码示例。 from playwright.sync_api imp…...
VGA显示
屏幕扫描形式 在回扫的过程中,电子枪不能发射电子,否则会影响荧光屏上既有图像的颜色,所以 回扫期间,需要进行行消隐,简单来说就是关闭电子枪。每行结束时,用行同步信号进行行 同步,图中从右上方向左下方的斜向虚线就是其回行扫示意图。 当整个屏幕的所有行都扫…...
微服务1--服务架构
系统架构 单体应用架构 特点:所有功能集中在一个应用中(如传统的 Spring Boot WAR 包)。 适用场景:小型项目、快速验证阶段。 优缺点: ✅ 开发简单,部署方便。 ❌ 扩展性差,技术栈耦合。 …...
鸿蒙应用元服务开发-Account Kit配置登录权限
一、场景介绍 华为账号登录是基于OAuth 2.0协议标准和OpenID Connect协议标准构建的OAuth2.0 授权登录系统,元服务可以方便地获取华为账号用户的身份标识,快速建立元服务内的用户体系。 用户打开元服务时,不需要用户点击登录/注册按钮&#…...
zg-docker详解与部署微服务实战与k8s
一. Docker课程 Docker简介 Docker是一个开源的容器引擎,有助于快速开发,docker更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 使用宿主机的网络:即使用宿主机的网段。 联合文件系统-一个镜像,启动了多个容器,对于镜像中的文件a,多个容器…...
【含文档+PPT+源码】基于Python的快递服务管理系统【
毕业作品基于Django和HTML的快递网站设计与实现 课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于Python的快递服务管理系统&#x…...
嵌入式WebRTC轻量化SDK压缩至500K-800K ,为嵌入式设备节省Flash资源
一、SDK轻量化的核心技术实现 1、WebRTC库裁剪与模块化设计 EasyRTC针对嵌入式设备的资源限制,对原生WebRTC库进行深度裁剪,仅保留核心通信功能(如信令管理、编解码、网络传输等),移除冗余组件(如部分调试…...
JAVA学习-Stream
Stream Stream也叫Stream流,是Jdk8开始新增的一套API (java.util.stream.*),可以用于操作集合或者数 组的数据。 优势: Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式 操作集合或者数…...
如何在同一个电脑配置多个jdk版本并随意切换
1.右键此电脑属性 2.点击高级系统配置 3.点击环境变量 4.进去后点击新建 变量名:JAVA_HOME_版本,来进行命名 变量值:jdk的路径即可,比如我的是D:\JAVA\JAVA11 5.创建完你所有的jdk版本之后接着新建 变量名:JAVA_HOME…...
网工_传输层协议概述
2025.02.19:网工老姜&小猿网学习笔记 第22节 传输层协议概述 2.1 进程之间的通信2.2 传输层的两个主要协议2.3 传输层的端口2.3.1 端口号 2.4 本章小结 2.1 进程之间的通信 前三层解决了数据从主机到主机的问题,也就是,我们现在已经可以把…...
《java面试宝典》之java多线程面试题
1:什么是线程? 轻量级的进程 2:线程的三个部分是? 处理机 代码 数据 3:为什么使用多线程 使UI响应更快 利用多处理器系统 简化建模 4:代码示例:Java中实现多线程的两种方式,包括如何…...
5款电脑健康状况监测软件
鲁大师:专业且免费,能检测电脑硬件配置,辨别硬件真伪,检查电脑病毒隐患。可一键清理系统垃圾,提升电脑性能。还能全程监护硬件状态,实时检测硬件温度变化,让用户轻松掌握电脑健康状况。360 安全…...
JWT令牌:实现安全会话跟踪与登录认证的利器
摘要:本文深入探讨了JWT令牌在实现会话跟踪和登录认证方面的应用,详细介绍了JWT令牌的概念、组成、生成与校验方法,以及在实际案例中如何通过JWT令牌进行会话跟踪和登录认证的具体实现步骤,为系统的安全认证机制提供了全面且深入的…...
uni-app/微信小程序接入腾讯位置服务地图选点插件
uni-app/微信小程序接入腾讯位置服务地图选点插件 0、常出现的错误及解决方法0.1插件未授权使用(见步骤1)0.2小程序类目不符合引用该类目插件的要求或主体类型不符合要求(见步骤1)0.3需要在app.json中声明permission scope.userLo…...
3款顶流云电脑与传统电脑性能PK战:START云游戏/无影云/ToDesk云电脑谁更流畅?
这里写目录标题 一、前言二、本地机器配置环境三、START云游戏/无影云/ToDesk云电脑配置对比3.1 START云游戏3.2 无影云个人版3.3 ToDesk云电脑 四、本地电脑与云电脑性能实战4.1 游戏场景体验4.1.1 本地电脑测试4.1.2 云电脑测试英雄联盟黑神话悟空其他游戏 4.2 主流设计场景体…...
WINUI——Background小结
在 WinUI/UWP XAML 中,Background(或其他颜色属性)支持 多种颜色表示方式,包括以下三种主流格式: 1. RGB 十六进制(不透明) 格式:#RRGGBB特点…...
公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度
以下是公司内部自建知识共享的方式分类、详细步骤及表格总结,分为开源(对外公开)和闭源(仅限内部),以及公共(全员可访问)和内部(特定团队/项目组)四个维度&am…...
cursor AI编辑器的详细使用
以下是Cursor AI编辑器的详细使用介绍,涵盖核心功能、安装配置、使用技巧、高级应用及常见问题解决方案,结合了多个权威来源的实践指南和最新技术动态: 一、Cursor AI简介与核心功能 定位与架构 Cursor是基于Visual Studio Code(V…...
js逆向入门实战某某观察网响应数据解密
(base64解码 base64解码)地址:aHR0cHM6Ly93d3cuc3dndWFuY2hhLmNvbS9ob21lL2NpdHktZGV0YWlsP2NvZGU9MzEwMTAw 分析过程 1.抓数据包,发现响应数据是加密字符串。 2.对于这种回显数据解密,大概率通过拦截器实现,搜索intercepto…...
Ubuntu安装yum遇到Package ‘yum‘ has no installation candidate
环境说明 Window11,WSL2,Ubuntu24.04 错误描述 rootLAPTOP:~# apt-get install yum Reading package lists... Done Building dependency tree... Done Reading state information... Done Package yum is not available, but is referred to by anot…...
爱普生SG3225EEN低抖动差分晶振在网络通信的应用
在当今数字化时代,网络通信的飞速发展对数据传输的准确性、稳定性和高效性提出了极为严苛的要求。从 5G 通信网络的大规模部署,到数据中心的海量数据交换,再到智能家居系统的互联互通,每一个环节都离不开精准稳定的时钟信号作为支…...
软考教材重点内容 信息安全工程师 第22章 网站安全需求分析与安全保护工程
22.1.1 网站安全概念 网站是一个基于 B/S 技术架构的综合信息服务平台,主要提供网页信息及业务后台对外接口服务。一般网站涉及网络通信、操作系统、数据库、Web 服务器软件、Web 应用、浏览器、域名服务以及 HTML, XML,SSL; Web Services 等相关协议,同…...
数智读书笔记系列029 《代数大脑:揭秘智能背后的逻辑》
《代数大脑:揭秘智能背后的逻辑》书籍简介 作者简介 加里F. 马库斯(Gary F. Marcus)是纽约大学心理学荣休教授、人工智能企业家,曾创立Geometric Intelligence(后被Uber收购)和Robust.AI公司。他在神经科学、语言学和人工智能领域发表了大量论文,并著有《重启AI》等多部…...