自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(868)
  • 收藏
  • 关注

原创 从技术应用到原理探索:重新认识技术的底层世界

你现在不需要急着把所有技术的底层都学一遍。我更建议你围绕 C++,逐渐建立一张自己的技术知识地图:内存、对象生命周期、编译链接。进程、线程、虚拟内存、IO、多路复用。网络通信:TCP、UDP、Socket、网络协议栈。DDS、共享内存、消息队列。软件工程:架构、并发、性能分析、可观测性。这些东西相互之间是有关联的。你学 DDS,可能会接触 UDP;学 UDP,可能会接触 Linux 网络协议栈;学网络协议栈,又会接触内核、内存和多线程。这是一条可以不断深入的技术路线。

2026-11-08 01:25:05 58

原创 learn Fast DDS(1)

Fast DDS 是一个非常值得深入研究的。尤其是你之前在工作中接触过 DDS,现在又对以及感兴趣,我觉得可以把 Fast DDS 作为一个完整的学习项目。先说最重要的一句话:Fast DDS 是的一种实现,它帮助,通过进行。它不是简单地封装了一层 UDP,而是包含了等一整套机制。

2026-11-08 01:15:10 123

原创 learn DDS (2)

DDS 最有意思的是:它怎么知道数据该发送给谁?你必须知道对方的 IP 和端口。但 DDS 可以这样:假设电脑 A 负责发送雷达目标信息,电脑 B 负责接收。DDS 的自动发现通常分两个阶段:SPDP:先发现。SEDP:进一步发现参与者有哪些,它们。常见的会通过进行初始发现,也支持等配置方式。所以 DDS 并不是完全不知道,而是把的工作交给了中间件。

2026-11-08 01:04:00 51

原创 learn DDS (1)

所以你之前写 DDS 代码的时候,可能根本不需要接触 IP、端口或者 Socket,但底层实际上可能一直在使用 UDP 通信。也就是说,DDS 可以把底层的通信细节封装起来,让业务开发者仍然使用相同的发布订阅接口。此前在工作中接触过 DDS 通信,也参与过相关功能的开发与联调,但对于。我希望能够深入了解 DDS 的底层实现原理,而不仅仅停留在 API 的使用层面。还有一个很有意思的细节:同一次 DDS 通信甚至可以混合使用不同的传输方式。,所以你现在完全可以从底层去理解 DDS 了。

2026-11-08 00:50:59 129

原创 codex model selection

上一代高性能模型复杂代码、研究、专业工作上一代均衡模型日常工作、文档处理上一代轻量模型简单任务、重复任务这里有两个特别值得注意的地方:Astra 是目前官方定位中能力最强的模型。GPT-6.1 Sol 的复杂任务能力接近 Astra,但使用成本更低。

2026-11-07 03:21:37 186

原创 无论你是在学习什么,尤其是编程,入门门槛都应该足够低,让你能够先享受到其中的乐趣,然后真正开始学习,而学习需要花很长时间。

“Git从来不是我的主业,我受到的赞誉太多了!”Linus谈Linux开发往事:造Git,只是为了能回去维护内核-优快云博客

2026-11-06 15:50:19 14

原创 Learn TLS

以常见的 TLS over TCP 为例,TLS 位于应用协议和 TCP 之间。身份认证(Authentication):验证通信对方的身份,通常是。,通常运行在 UDP 443 上,TLS 1.3 的握手机制集成在。机密性(Confidentiality):通过加密。虽然名字里有“传输层”,但 TLS 通常被归类为。,或者理解为位于应用层与传输层之间的。TLS 最常见的应用:HTTPS。使用的是 HTTP + TLS。TLS 在网络协议栈中的位置。,而 TLS 主要是为。使用的是 HTTP。

2026-11-06 15:41:10 197

原创 learn telnet

Telnet(NETwork)是一种基于 TCP 的,主要用于和。你刚刚学习了 SSH,实际上可以把 Telnet 理解为广泛使用的一种远程登录方式。

2026-11-06 15:22:56 192

原创 通信调试助手---添加功能

添加一个保存信息的按钮,然后再添加一个导入的按钮。无效配置会提示错误,保留当前设置。将这些信息保存为xxx.json文件。(1)我要发送的报文的内容。(2)本地IP 本地端口。(3)远程地址 远程端口。原“保存”按钮改名为“测试过了,挺好用的。

2026-10-31 11:36:21 92

原创 结构体数据编辑器(5)

然后我点击这种按钮(类似 "复制十六进制")时,就调用这个接口,这样的好处是,可以让人看到效果,然后,不会一直存在。点击 复制到16进制 按钮后,在电脑的右下角弹出一个小窗体:提示"复制成功"按照调用顺序依次上移,每个小窗体的显示时间到了以后,就消失。这是我想要的效果,然后持续3秒,窗体消失。算了,现有的逻辑也还可以,就先这么用吧。

2026-10-29 23:00:55 138

原创 结构体解析器(4)

我第一次编辑过了结构体的值,然后我保存好了结构体的16进制值,我希望有个入口,让我输入结构体的值,然后呢,就在主界面读取进去,然后我这时候要修改某个字段的值,就可以很方便地修改了。可以新增一个按钮,把16进制数据导出到文件中,然后实现一个支持从文件中导入16进制数据,显示在可以编辑的界面上。我觉得可以添加一个按钮:"导入16进制数据",功能就是,导入16进制数据到当前结构体,界面同步更新。我有个好奇的点哈,如果我的这个文本文件是紧凑排布的,或者没有换行,这种文件我们的程序可以识别吗?

2026-10-29 22:36:08 10

原创 结构体解析器_环境配置

这个修改只影响 Qt Creator 启动的程序,不会修改 Windows 的系统 PATH,也不影响编译时的头文件和库路径。,让程序启动时能找到 Qt 的 DLL。它只影响本次启动的环境,不修改系统 PATH。例如,程序链接了 Qt 库,Qt Creator 会把。然后重新运行 qmake、重新构建。程序启动时,就能从这个目录找到。在 Qt Creator 的。在 Qt Creator 的。的,先给我说下怎么安装吧。是的,你的项目确实依赖。按当前配置,推荐安装。这个包包含项目需要的。

2026-10-29 19:03:24 109

原创 Nping 自定义 UDP 报文、控制每秒发包数量

这是 Nmap 项目提供的发包工具,支持 UDP、自定义数据内容、指定发送速率和发送次数。特别适合做阶梯式压力测试,观察你的程序在不同报文速率下表现如何。例如,在授权的本机测试环境里:这表示目标发包速率为每秒 1,000 个、总共 10,000 个 UDP 探测包。实际发送速率仍需验证。使用 Nping 向本机 的 UDP 6000 端口发送测试报文,报文数据为 ,目标发送速率为每秒 1000 个,总共发送 10000 个探测包。参数作用你可以怎么理解启动发包工具执行测试程序使用 UDP 协议不建立

2026-10-29 17:13:33 193

原创 插件式框架代码分析(5)

界面,但嵌入容器后的界面由 Qt 父子关系管理,因此图中没有把界面画成插件拥有的成员。,还需要主程序注入服务,以及插件主动注册命令、发送命令或订阅消息。PluginServicesAware 类让。,并记录退出时需要清理的注册项。可以互相通信,可以这样理解吗。② 插件:接口与业务界面。③ 通信:你最近关注的。把插件接入这两个体系;

2026-10-28 22:31:18 103

原创 动态库通信 --- 回调函数

【代码】动态库通信 --- 回调函数。

2026-10-28 22:30:55 9

原创 结构体解析器(1)

我觉得,这个例子非常适合拿来设计我们的。首先明确,我们到底要从中提取什么?我们真正关心的是:属性解析结果结构体名称MsgHeader内存对齐方式1 字节结构体总长度7 字节字段数量3字段顺序以及每个字段的详细信息:字段类型字节数偏移量msgIduint16_t20msgTypeuint8_t12dataLengthuint32_t43我觉得有三种路线。方案实现方式评价A正则表达式上手快,适合简单结构体B词法分析 + 简单语法解析。

2026-10-28 21:44:50 215

原创 结构体解析器(3)

下一步,我希望可以根据头文件中的结构体声明,得到对应的json文件,你理解吗?解析成功后,可选择位置保存 JSON,包含类型、嵌套字段、大小、对齐及偏移等信息,中,可以直接据此生成 JSON,并增加一个“导出结构定义 JSON”按钮。,就可以继续使用现有的树形界面、输入校验和二进制编码逻辑。v1.1.0(数组部分内容填0,允许查看二进制)v1.0.9(整数支持十六进制输入)是的,这一步建立了一个很有用的。你要的是结构体定义的。这个版本提供可执行程序。现在我们已经基本实现了。的偏移,嵌套关系通过。

2026-10-28 02:35:18 60

原创 结构体解析器(2)

限制的是文件内的结构体名称。当前只查找所选文件中定义的结构体,不查找它通过。我想问下,我现在的程序只能解析名字是MsgHeader的结构体吗。显示为一个字段,能读取它的类型、大小和偏移,但不会展开里面的。我修改了头文件,相关的解析代码不需要改变吗,是通用的吗。下一步,我希望可以引入一个嵌套型的结构体,你理解吗。添加界面,可以在界面中查看相关的信息。可以,现有的树形展示已经适合继续做。扩展一下吧,再复杂一点,可以吗。,因为程序是在运行时读取它的。,可以展开、折叠成员,同时保留。

2026-10-28 01:13:14 111

原创 动态库 --- 接口类 / 函数指针表

这是把接口类给暴露在外面,然后依赖于虚函数的机制,实现多态。是虚函数,所以会执行实际对象的。主程序也可以传入另一个实现了。的对象,A 的调用代码不用改。这里“暴露接口类”就是让双方包含。,但它实际指向 B 库中的。,也就是 B 库里的代码。对,你理解得很准确。

2026-10-27 10:19:11 171

原创 动态库---导出函数接口

中的ExportedFunInterface。它们都在主程序的同一个进程里,所谓“通信”,这里就是。提问:这时候主程序不需要链接动态库B吗?,因为主程序只调用了 A 的。

2026-10-27 09:51:21 102

原创 不同的动态库之间,互相通信,一般都是使用什么方法啊?

通常还是当前线程进入 B.dll 的函数,使用当前线程的调用栈;只有函数内部主动安排。当 A.dll 调用 B.dll 的。时,才可能涉及其他线程。

2026-10-27 09:30:40 189

原创 什么是交换机,什么是路由器

什么情况下需要配置电脑的路由,我同事说(1)多网卡 (2)跨大于等于2个交换机-优快云博客交换机和路由器是计算机网络中非常重要的两种设备。你之前问过多网卡、路由表、UDP 通信的问题。要真正理解这些问题,首先需要理解交换机和路由器分别解决了什么问题。交换机(Switch)的主要作用,是让同一个局域网中的多台设备互相通信。比如,你有三台电脑,希望它们能互相发送 UDP 数据。电脑 A 要向电脑 B 发送 UDP 数据。交换机会学习连接在各端口上的设备 MAC 地址,并利用 MAC 地址表,尽可能把数据帧转发

2026-10-27 09:12:51 238

原创 什么情况下需要配置电脑的路由,我同事说(1)多网卡 (2)跨大于等于2个交换机

都可能涉及,但严格来说,这两个条件本身都不意味着必须配置路由表。真正决定是否需要配置路由的,是,以及。

2026-10-27 08:57:27 133

原创 插件式框架代码分析(4)

3. ContentPlugin 创建 FWidget 时继续传入。因此,ContentPlugin 和它创建的 FWidget。2.ContentPlugin 接收并保存指针。4. FWidget 用构造函数保存指针。在插件初始化前,检查插件是否实现。,相当于把传入的地址保存下来。它们就是你前面理解的那种。1.主程序创建服务对象。就是服务对象的源头。

2026-10-26 11:26:58 54

原创 插件式框架代码分析(3)

对,你理解得很准确。更精确地说,它管理的是 <id, CommandHandler*>这里并没有“先找到基类,再查找子类”的过程。是项目里的一个 C++ 类,可以理解为。是的,这个框架确实充分利用了。不过这里准确的术语是。它不需要知道处理器是。

2026-10-26 09:39:42 180

原创 插件式框架学习(6)

,下一步补上这层,就能支持“独立业务插件如何协作”。,不用包含对方的头文件,也不用链接对方的 DLL。两个 DLL 通过主程序总线通信,不互相链接。你现在的架构已经解决了“不是完全没有办法,而是。

2026-10-26 08:51:50 131

原创 插件式框架代码分析(2)

思考,已有main.ui,怎么知道当前我有6个WidgetContainer对象?这相当于告诉主程序:“我可以创建这两种内容。它是插件入口,负责创建内容;最关键的一点是:ContentPlugin。此时只是登记方法,还没有创建内容窗口。读到每一处时,都会进入它重写的。等整个 UI 加载完成,再读取。把这些描述组装成真正可运行的界面。UI 加载器读取后,让容器调用。就是容器,作为新窗口的父对象。程序不是提前写死“有六个”,而是。因此,六处描述就会创建六个对象。,才能可靠地知道要装入什么内容。

2026-10-26 08:51:18 209

原创 插件式框架代码分析(1)

所以,某种程度上,如果还有新接口需要添加,就可以再继承一个类似的新的接口类,接口类编写纯虚函数,ContentPlugin实现相关的接口。“plugin.f” → 需要创建时,调用 module->createWidget(...)代表某个插件类是否继承了类WidgetProvider,以此来区分该类是否有创建界面的能力。这个函数就是我们可以运行时动态创建QWidget程序的关键了。这个类,可以据此根据名称创建QWidget子类。之间的接触面,插件内部的实现自由度仍然很大。对,这就是我们现在采用的。

2026-10-25 00:37:37 109

原创 插件式框架学习(5)

报表编辑可以更新预览。三个 DLL 独立构建,各区域仍可通过。就可以在同一个窗口里组合不同插件提供的界面。我赞成你提出的拆分方向,不过划分依据更适合用。,而不是单纯看类有多少、代码有多复杂。,某个插件崩溃依然可能影响整个程序。这个示例插件是:DemoPlugin。,不需要修改主程序。

2026-10-25 00:37:18 83

原创 插件式框架学习(4)

这意味着我可以在ContentPlugin中创建100个子类QWidget,然后,填对应名称即可加载。以后新增类只需编译插件 DLL,主程序不用重新编译。同时保持 Qt、编译器和接口版本兼容,这套机制就能稳定扩展。主程序虽然通过名称选择内容,但仍包含这些类的实现,所以。,下一步可以把它们接起来:让插件通过统一接口提供“我理解说,这相当于进一步的解耦合了。已有类之间的选择则只需修改 UI。声明并创建 QWidget,主程序。”,工厂再按名称调用对应插件。已实现:插件可以通过。

2026-10-25 00:37:08 156

原创 插件式框架学习(3)

编辑main.ui,将容器的contentClass改为c,d或e。在这些类之间选择、组合和调整布局,只需修改 UI 文件并重启程序。,就能选择加载哪个类;同一个类也可以在多个容器中分别创建实例。两个容器独立选择,负责承载内容,并让内容自动填满容器。程序读取这个属性,将对应内容装进去。中的配置,再重启程序,就能改变左右两边使用的内容。还可以在 Designer 中给每个。设置一个动态属性,例如。对,已经实现了这种效果。你可以编写 100 个。之后你可以把左侧换成。

2026-10-25 00:36:55 138

原创 插件式框架学习(2)

是的,你实现一下吧,就基于当前ApplicationHost,我不想使用QMainWindow window;好了,这一版实现了可以动态读取ui文件的逻辑。可以,Qt 支持这种方式,关键是。

2026-10-25 00:36:40 211

原创 插件式框架学习(1)

只有符合 Qt 插件格式、实现了约定的。以后这个目录里有多个插件,命令。现在调用这行,是不是没有效果?改成其他未占用的编号,只要。能被加载,是因为它位于。当前代码收到它后,会扫描。提问:1000代表什么?也会一起尝试加载它们。对,更准确地说,1000。成功的插件,才会被保留。

2026-10-24 19:35:45 203

原创 照明控制台Qt图形界面开发

2026-10-24 16:35:09 9

原创 Qt开发工程师

我觉得这个岗位很值得我们研究。因为它不仅是一份薪资达到的 Qt/C++ 工作,还让我们看到,Qt 开发者如果向发展,可能拥有怎样的职业空间。不过,这个岗位的技术门槛也确实比较高。

2026-10-24 16:33:41 146

原创 我了解QPainter,Graphics View,但是呢,我希望自己可以更深入,我的项目中实际使用的不多

你不是完全没有接触过 QPainter 和 Graphics View,而是在真实项目中使用过它们,只是还没有遇到足够复杂的应用场景,让你能够深入研究。

2026-10-24 16:33:19 150

原创 Jenkins

你截图中的职位要求提到了 Jenkins。JenkinsJenkins 是一个,经常用来。它可以在。对的!👍 你理解得完全正确!CI/CD 的核心思想,就是将。不过,有两个小细节值得补充:第一,自动编译不一定意味着。例如 Qt 软件有图形界面,CI/CD 通常会,但不一定真的打开窗口进行操作。如果需要,可以使用等工具。第二,打包成功不一定意味着自动发布。

2026-10-24 16:32:58 226

原创 CI/CD是什么

CI/CD 是中非常重要的一套。你刚才看到的那个月薪 20–21K、驻罗马尼亚的软件集成工程师岗位,它的核心工作之一就是。

2026-10-23 10:03:43 94

原创 软件集成高级工程师

罗马尼亚既有现代化的城市、写字楼、软件研发中心,也有欧洲风格的老城区、城堡和喀尔巴阡山脉。工程师,而不是专门编写 Qt 界面或 C++ 业务逻辑的开发工程师。首都,也是全国最重要的商业和就业中心之一。罗马尼亚(Romania)位于欧洲东南部,首都是。它并不是西欧那种特别富裕的国家,但拥有一定规模的。,就要考虑这个岗位能否让你保持代码开发能力。我查了无锡车联天下的官方网站,它确实列有。方向发展,它倒是可能打开另一条职业道路。从截图的岗位描述来看,工作围绕。列为当地重要的经济组成部分。

2026-10-23 09:58:04 151

原创 Deskflow模拟学习v1.1

我会把现在的“字符输入”升级为“按键按下/松开”同步,支持 Shift 大写、Caps Lock,以及回车、退格、空格、方向键、功能键和常用组合键;同时处理断线后的按键释放,避免 B 端出现按键一直按住的情况。现在我想更进一步,你现在支持一下大写字母,还有键盘上的其他键,你理解吗,以及,你能实现吗?测试过了,字母是可以的,但是只能小写字母,然后可以是1-9。你希望客户端从“只打印按键”升级为。,而不只是客户端的日志框。是的,是的,我就是这个意思。

2026-10-23 02:01:27 174

C++ 比较好用的地图库 (尝试) QGeoView (sample目录中的pro文件已经修改过)

C++ 比较好用的地图库 (尝试) QGeoView (sample目录中的pro文件已经修改过)

2026-10-05

Qt抽屉窗体实现demo

Qt抽屉窗体实现demo

2026-09-30

Qt插件机制示例V3 plugin

Qt插件机制示例V3 plugin

2026-09-29

Qt插件机制demo示例 V2

插件机制代码示例

2026-09-29

Qt插件机制demo示例

插件机制代码示例

2026-09-29

网络调试助手-Qt-适用于银河麒麟

网络调试助手-Qt-适用于银河麒麟

2026-08-07

实例1-目录结构清晰-内容待测试

实例1-目录结构清晰-内容待测试

2026-07-21

QtSingleApplication

QtSingleApplication

2024-06-24

tcp客户端(多线程版本)

存在很多bug,连接到服务器后,点击发送,在子线程中每1ms发送一次数据给服务器

2024-04-25

tcp服务器端代码(与演示效果相符)

tcp服务器端代码(与演示效果相符)

2024-04-24

Qt tcp通信(exe)

(服务器+客户端)(一对一)

2024-04-23

Qt的tcp网络编程(客户端和服务器)

(只支持一对一通讯)(来自Qt5.9 C++开发指南)

2024-04-23

QtWebApp的示例

https://blog.youkuaiyun.com/weixin_41001497/article/details/108317463?ops_request_misc=&request_id=&biz_id=102&utm_term=http%E6%9C%8D%E5%8A%A1%E5%99%A8%20qt&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-108317463.142^v99^pc_search_result_base4&spm=1018.2226.3001.4187 代码来自这篇文章

2024-03-22

miniblink简单demo分享

miniblink简单demo分享

2024-02-21

使用QZipWriter来递归地压缩文件夹

使用QZipWriter来递归地压缩文件夹

2024-02-09

我学习qt以来的所有demo的集合

我学习qt以来的所有demo的集合

2023-09-01

数据库期中考试试题(有答案)

数据库期中考试试题(有答案)

2023-07-23

数据库期中考试试题(无答案)

数据库期中考试试题(无答案)

2023-07-22

微机(测试,实验,作业)(水)

微机(测试,实验,作业)(水)

2023-07-11

计网实训个人记录与总结(水)

计网实训个人记录与总结(水)

2023-07-10

编译原理学习记录(纯纯记录)

编译原理学习记录(纯纯记录)

2023-04-20

Qt与sql server 2008

Qt与sql server 2008

2022-11-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除