1. 常用的宏
宏
功能
CMAKE_SOURCE_DIR
顶层CMakeLists.txt文件所在的根目录
CMAKE_CURRENT_SOURCE_DIR
当前访问的 CMakeLists.txt 文件所在的路径
PROJECT_SOURCE_DIR
使用cmake命令时,后面紧跟的目录,一般是工程的根目录
EXECUTABLE_OUTPUT_PATH
指定输出的目录(CMake 3.0 版本开始已被弃用)
LIBRARY_OUTPUT_PATH
指定输出库目录(CMake 3.0 版本开始已被弃用)
CMAKE_AUTORCC
指定CMake是否会自动处理Qt资源文件
CMAKE_BINARY_DIR
可执行程序的输出路径
2. 最简单的CMakeLists.txt文件12345678# 指定使用的 cmake 的最低版本cmake_minimum_required(VERSION 3.8) # 项目名称 项目版本 项目使用的编程语言project (Master VERSION 0.1 LANGUAGES CXX)# 可执行程序名 源文件 ...
1. Windows平台1.1 使用windeployqt.exe工具打包可以为windeployqt.exe添加环境变量
1.1.1 无法定位程序的输入点原因:windeployqt.exe工具在查询所需库时首先从环境变量中进行寻找,没有使用Qt本身下的路径。
比如:D:\Qt\Qt5.15.2\5.15.2\mingw81_32\plugins\platforms目录下复制qwindows.dll到运行目录下的platforms文件夹下
可以使用everything工具查看
1.2. 打包使用Inno Setup软件进行打包
2. Linux平台2.1 linuxdeployqt下载安装 下载地址:https://github.com/probonopd/linuxdeployqt/releases
123456mv linuxdeployqt-continuous-x86_64.AppImage linuxdeployqtchmod 777 linuxdeployqtsudo mv linuxdeployqt /usr/local/bin# 测试 ...
1. 官网下载JetBrains: 软件开发者和团队的必备工具
2. 配置Qt环境
说明: debug和release只需要配置一个即可。
实参:$FileName$ -o ui_$FileNameWithoutAllExtensions$.h
抓包界面显示的结果和协议栈的层次关系正好相反,最上面的是物理层,最下面是应用层。具体的对应关系如下:
Frame: 物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP
Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议
1.TCP基础📚基础理论📐传输控制协议
传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在 OSI 模型中完成传输层指定功能。 TCP 使用校验和函数检验数据是否出现错误,在数据发送和接收时均需要计算校验和。
✒️TCP 特点1.TCP 是面向连接的传输层协议
应用程序在使用 TCP 协议前,必须首先完成 TCP 连接的建立。在数据传输结束后,必须释放先前已建立的 TCP 连接
2.每一条 TCP 连接只能有两个端点
TC ...
自定义窗口类继承QWidget不显示主要是因为QSS样式不生效
QWidget仅仅支持background,background-clip和background-origin属性(其实和不支持qss也没差多少…)。如果你继承自QWidget自定义一个窗口,那么你需要重写 paintEvent事件,当然文档里已经给你写好了,直接粘贴进去就可以了。下面列一份代码段:
12345678void CustomWidget::paintEvent(QPaintEvent *event){ QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);}
在 Windows 系统里链接动态库时,编译阶段链接的是动态库的导入库(.lib 文件),而程序运行时依赖的是具体的动态链接库(.dll 文件)
编译阶段:链接导入库
导入库的作用:导入库是一个相对较小的文件,它主要包含了动态链接库中导出函数和变量的符号信息,如函数名、参数类型、返回值类型等。在编译和链接过程中,链接器会读取导入库中的符号信息,并将这些信息嵌入到可执行文件中。这样,可执行文件在运行时就知道要从哪个动态链接库中加载哪些函数和变量。
链接方式:在 Qt 的 .pro 文件或者其他编译配置中,使用 -l 和 -L 选项来指定要链接的导入库。
12345678910111213win32: { LIBS += -L$$DESTDIR/ffmpeg/lib/ # 动态库路径 # 动态导入库 下列都是动态导入库,不是静态库 LIBS += "$$PWD/ffmpeg/lib/avcodec.lib" LIBS += "$$PWD/ffmpeg/lib/avdevice.lib" LIBS += &qu ...
成员变量初始化方式分析uint32_t mWidth {0}; 与 uint32_t mWidth = 0;
uint32_t mWidth {0}; 这种初始化方式是可以的,它使用了 C++11 引入的统一初始化语法(也称为列表初始化),和传统的 uint32_t mWidth = 0; 初始化方式各有特点,下面为你详细分析:
语法解释
**uint32_t mWidth = 0;**:这是 C++ 从 C 语言继承而来的传统初始化方式,称为拷贝初始化(copy initialization)。它会先创建一个临时对象,然后将这个临时对象的值拷贝给要初始化的变量。对于像 uint32_t 这种基本数据类型,编译器通常会进行优化,直接将值赋给变量,不会有额外的性能开销。
**uint32_t mWidth {0};**:这是 C++11 引入的统一初始化语法,也叫列表初始化(list initialization)或大括号初始化(brace initialization)。使用这种方式初始化时,变量会直接被初始化为大括号内的值, ...
1. QT5.15.2在程序退出时崩溃:提示QBasicTimer::start: QBasicTimer can only be used with threads started with QThread
我的是QComboBox引发的问题,我最开始因为一些原因将主界面设置成了单例类,去掉之后就好了。
引发的原因可以不一样,可以通过一点一点删除最后定位到原因。
1. 函数解析1initializeOpenGLFunctions();
初始化OpenGL函数,将Qt里的函数指针指向显卡的函数,这样如glGenBuffers()这样的函数实际操作的就是显卡上的内存了。
1.1 VBOVBO(Vertex Buffer Object):顶点缓冲区对象。
VBO 是一种用于在 GPU 中存储数据(例如顶点数据)的缓冲区对象。
VBO 存储的是实际的顶点数据、索引数据,如坐标分量,颜色等。
通过把顶点数据上传到 VBO 中,可以让 OpenGL 在渲染过程中直接从显存读取数据。
VBO 不保存顶点数据的布局或如何处理这些数据的信息。它只是简单地存储一段内存区域,数据是原始的顶点数据。
12unsigned int VBO;glGenBuffers(1, &VBO);
unsigned int VBO;是在CPU上创建了一个int类型的缓冲Id。
glGenBuffers(1, &VBO);相当于在GPU上创建了一个缓冲区对象标识符(buffer object identifier),也就是一个在 OpenGL 上下文中使用的唯一 ...