- 博客(727)
- 资源 (173)
- 收藏
- 关注
原创 OpenWrt:让OpenWrt支持USB声卡
本文介绍了Windows、Ubuntu和OpenWrt系统下的声卡测试方法。Windows平台使用CM108免驱USB声卡,通过系统自动识别功能测试硬件状态;Ubuntu需安装ALSA工具包,使用aplay/arecord命令进行音频测试,并介绍了设备配置方法;OpenWrt平台测试步骤也包含在内。文章详细说明了各平台测试的注意事项,如虚拟机环境设置、音频参数指定等,为开发者和用户提供了实用的声卡测试解决方案。
2025-06-13 23:29:05
175
原创 OpenWrt:使用ALSA实现边录边播
ALSA是Linux系统的主流音频架构,包含内核驱动层(alsa-driver)和应用层库(alsa-lib)。在Ubuntu中可通过libasound2-dev包安装,提供aplay等实用工具。示例代码展示了如何通过alsa-lib API实现音频采集和播放功能,编译时需要链接-lasound库。虚拟机使用时需确保声卡设备已连接。OpenWrt平台也支持ALSA,但需注意嵌入式环境的特殊配置。ALSA为Linux音频处理提供了完整的解决方案。
2025-06-07 22:43:07
399
1
原创 Qt实现的水波进度条和温度进度条
本文介绍了两种Qt控件实现方法:水波动画控件和温度进度控件。水波控件通过正弦/余弦函数生成波浪曲线,采用相位偏移实现双波叠加效果,并利用定时器动态更新波浪位置。温度控件采用饼状图展示进度,通过定时器控制高亮圆点移动来指示运行状态,防止用户误判为卡顿。两者都支持自定义颜色、数值范围和边框宽度等属性,并提供了完整的类实现代码,包括绘制逻辑、动画控制和属性设置方法。
2025-06-02 09:20:48
690
原创 使用QCollator对QStringList排序
QCollator是一个支持语言环境的字符串排序工具,提供三种排序策略:设置大小写敏感、忽略标点符号和数字模式。在数字排序场景中,通过setNumericMode(true)可实现按数值排序(如"1"<"100")。对于混合字符串也能灵活处理,可与std::sort配合使用,支持直接传入比较器或lambda表达式两种方式。该工具能有效解决常规排序无法正确处理数字字符串的问题。
2025-05-24 12:14:22
60
1
原创 Qt高分屏自适应
Windows 上的桌面应用程序可以在不同的 DPI 感知模式下运行。这些模式可实现不同的 DPI 缩放行为,并且可以使用不同的坐标空间。有关 DPI 感知的详细信息,请参阅。请务必显式为进程设置默认 DPI 感知模式,以避免意外行为。有两个清单设置可用于指定进程默认 DPI 感知模式:<dpiAwareness> 和 <dpiAware>。<dpiAware> 已在 Windows Vista 中引入,仅允许将进程默认设置设置为系统感知。
2025-03-22 22:48:21
735
1
原创 Qt基础之四十九:Qt属性系统(Property System)
属性使用的自定义类型需要使用Q_DECLARE_METATYPE()宏进行注册,以便将其值存储在QVariant对象中。这使得它们既适用于在类定义中使用Q_PROPERTY()宏声明的静态属性,也适用于在运行时创建的动态属性。
2025-02-24 23:30:34
324
1
原创 QListView实现文件选择功能
QList实现的文件选择功能很常用,但是最高效的做法是先让左侧的源列表默认排序,然后再进行文件选择,这样在选择操作后,无论是源列表还是目标列表,都能很容易保证原来的顺序。
2025-02-23 21:14:19
281
原创 QTreeView添加网格线
网格线虽然可以用样式表添加,但效果不好。这里重写QTreeView的drawRow函数来实现网格线的绘制需要注意的是,当我们对QTableView/QTreeView/QTableWidget/QTreeWidget某行选中后,会发现某些单元格设置的前景色被覆盖了,比如设置的红色,一旦选中就变成了白色(如下图所示)。这肯定不是我们想要的,需要用自定义委托将其去掉。
2025-02-13 22:52:09
488
1
原创 QTreeView和QTableView单元格添加超链接
QTreeView和QTableView单元格添加超链接的方法类似,本文仅以QTreeView为例。在QTableView仿Excel表头排序和筛选中已经实现了超链接的添加,但是需要借助delegate,这里介绍一种更简单的方式,无需借助delegate。二.实现QHTreeView.hQHTreeView.cppMainWIndow.cpp在QHTreeView中通过带下划线的文本来模拟超链接,当鼠标悬浮在带下划线的文本上时,鼠标指针变为小手形状,在鼠标点击时触发超链接。这种方法的缺点
2025-02-09 22:35:08
445
1
原创 QTableView冻结多列
要实现列冻结,也就是说在拖动水平滚动条的时候,第一列永远显示在窗口上。怎么做到这个效果呢?这个例子给的解决办法很简单,我们只需要把两个视图叠加在一起,上层这个视图只显示第一列,下层的视图是全显示,然后拖动时候我们只需要正常拖动下层视图,上层视图联动即可。可用通过tableView->setFreezeColumns(2);设置要冻结的列数,谁然只是多冻结了几列,还是有许多工作要做的,千万不要对产品的需求轻易说Yes。下面稍作修改,让其支持冻结多列。
2025-02-09 11:29:30
563
原创 Qt之设置QToolBar上的按钮样式
通常给QAction设置icon后,菜单栏的菜单项和工具栏(QToolBar)上对应的按钮会同时显示该icon。这里使用ToolButtonTextUnderIcon,效果如下所示:工具栏按钮会自适应文本宽度,这样会导致两个按钮不一样大,那么如何将按钮设置成一样大呢,并自定义悬浮和点击的背景色?
2025-02-07 23:07:37
792
2
原创 C++笔试题之实现一个定时器
C++面试题之实现一个定时器。1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务,通过容器储存任务3.当timer空闲时(即没有任务或执行任务的时刻未到),timer中的线程不应该空转来占用资源,可通过条件变量实现4.支持重复任务和非重复任务
2024-11-03 15:16:57
1812
1
原创 Qt优秀开源项目之二十四:EXCEL读写利器QXlsx
QXlsx既可以编译成库,也可以直接引用源码QXlsx-master\QXlsx\QXlsx.pri。QXlsx是基于Qt5/Qt6的Excel文件(*.xlsx)的读写库。此处省略N个例子............................5️⃣ 读所有sheet的数据。3️⃣ 添加sheet。4️⃣ 选择sheet。1️⃣ 读单元格数据。2️⃣ 写单元格数据。7️⃣ 单元格的颜色。
2024-10-19 10:58:36
2410
1
原创 ASIO网络调试助手之四:浅谈QTcpServer性能
网络上有些质疑Qt Network模块性能的声音,本文将从理论和压测两个方面对比ASIO tcp server和QTcpServer在Windows上的性能,最后给出结论。
2024-10-18 00:48:51
1097
原创 Effective C++笔记之二十四:stack overflow
溢出(Stack Overflow)是指程序运行过程中,栈空间被耗尽,导致无法继续分配栈内存的错误。C++程序中,栈用于存储函数调用的局部变量、返回地址、函数参数等。当栈空间耗尽时,会引发栈溢出,通常导致程序崩溃。如果用的是Visual Studio,报错弹窗如下图所示。如果用的是其他IDE,比如所Qt Creator,直接crash了,无任何提示。通常的现象就是调用了一个函数,然后就崩了,注释调这个函数,一切正常。
2024-10-11 00:01:39
2406
原创 Qt5.15.2静态编译 MinGW with static OpenSSL
Qt5.15.2静态编译 MinGW with static OpenSSL
2024-10-10 01:26:08
1484
原创 Qt基础之四十七:管理员权限
在Windows系统中,以管理员身份运行的意思是,用系统管理最高权限运行程序。一般来说,只有当某些操作涉及系统保护区域时,才会需要用户授权管理员运行。如此一来,程序、命令在运行过程中,就有了足够权限,更改系统设置或注册表。
2024-09-25 23:38:47
2394
原创 Qt优秀开源项目之二十三:QSimpleUpdater
QSimpleUpdater是开源的自动升级模块,用于检测、下载和安装更新。QSimpleUpdater目前Star不多(911个),但已在很多开源项目看到起身影,比如。
2024-09-17 22:08:12
3172
2
原创 Effective C++笔记之二十三:非void函数不写return
Qt Creator查看汇编的步骤如下上图是g++编译器下的汇编eax就是main()函数的返回值如果删掉return 0;可以发现编译器还是把eax的值设为了0,由此可见,即使在main函数中不写return 0,编译器还是会默认添加个return 0。eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。
2024-09-17 12:27:04
2086
原创 Effective C++笔记之二十二:C++临时变量的析构
这行语句结束时这个变量就被析构了,指针c_str()指向的内存也被回收,所以下面使用的c_str()指向的内存已经被释放了,所以无法输出我的博客网址。预期输出:https://blog.csdn.net/caoshangpa,但实际上无论是VC++还是g++编译器下,输出都是乱码。但是把字符串改短点,比如改成“CSDN”,VC++编译器下输出为空,但在g++编译器下,是能正常输出的。因此这个问题非常隐蔽,不仅与编译器相关,还和临时变量的具体内容相关,一旦发生,很难定位。根据上面的分析,这些都是存在问题的。
2024-09-15 08:50:43
1323
原创 ASIO网络调试助手之三:ASIO网络编程注意事项
之前用过uv-cpp,和ASIO一样, 也支持异步机制,因此ASIO用起来还是比较顺手的,下面是个人总结的四点注意事项。
2024-09-14 22:35:53
2145
原创 ASIO网络调试助手之二:网络通信原理
网络调试助手是构建于网络套接字(Socket)组件之上的通信,而Socket本质上是对TCP/IP协议栈模型的封装。要熟练使用网络调试助手,就必须理解网络调试助手的通信原理,也就是要理解Socket以及TCP/IP协议的通信机制。
2024-09-08 22:18:31
2606
1
原创 C++之格式化日期时间为字符串(精确到毫秒)
C++11中提供了获取时间的chrono库,但是格式化显示太方便;C++11还提供了格式化时间iomanip库,通过其put_time方法可以格式化时间到秒,要显示毫秒,就需要自己处理了。
2024-09-08 19:59:12
1893
原创 ASIO网络调试助手之一:简介
多年前,写过几篇的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。开发环境:Win10支持协议:独立的Asio()只包含了头文件,不依赖Boost,使用时只需定义ASIO_STANDALONE,并将Asio的目录添加到编译系统的include path。Asio现在支持C++11/14/17/20,源码里提供了各个C++版本的examples。
2024-09-08 18:41:58
1273
原创 QTableView仿Excel表头排序和筛选
QTableview仿Excel表头排序和筛选:Excel功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选
2024-07-14 19:14:42
2049
17
原创 Effective C++笔记之二十一:One Definition Rule(ODR)
其实这是C++普遍存在的问题,在.h里面定义了一个class或者template等东东,这个头文件被include到多个cpp里,在这些cpp里原样展开,编译器在链接的时候,就会看到多个重复的定义,于是C++规定了ODR(One Definition Rule),简而言之:"看到这种重复定义的类,且这些类的代码又长得一模一样,编译器就随便选一个用就行了"。结合前面的现象,在Release模式下,内联真正发生,函数在调用处展开,所以能得到正确结果,尽管如此,由于内联的非强制性,代码这样写依然是有隐患的。
2024-07-10 00:26:43
2500
3
原创 QTreeView第一列自适应
通过setStretchLastSection(bool stretch)可以设置最后一列自适应,对于QTreeView,stretch默认为true。但有时候我们需要设置第一列自适应,比如文件浏览器,共有名称、大小和修改日期三列,大小和日期的宽度几乎是固定的,但名称却可长可短,此时我们希望在窗口大小变化时,第一列的宽度能自动缩放,第二列和第三列的宽度保存不变,而且要支持鼠标拖动调整列宽。
2024-06-30 07:25:01
1671
2
原创 QListView、QTableView或QTreeView截取滚动区域(截长图)
QListView、QTableView或QTreeView截取滚动区域(截长图)本文以QTreeView为例,理论上继承自QAbstractScrollArea的类都支持本文所述的方法。
2024-06-23 17:59:03
1340
1
原创 QTreeView双击任意列展开
重点是如何通过其他列的QModelIndex(假设为index),获取第一列的QModelIndex(假设为firstColumnIndex)。这里要注意index函数的第三个参数,第三个参数为父index,因为通过在tree中仅通过row和column无法确定目标index。下面是一个只有一列的tree,注释中为每行的row和column此时,model->index(0, 0);只会定位到node0,而不是node1-0、 node2-0或node2-1-0。
2024-06-23 14:52:46
1474
Boost.Asio C++ Network Programming(高清,带书签,可复制)
2018-01-29
20种数据结构和算法的C++实现
2017-11-17
WebRTC学习之四:最简单的语音聊天
2017-01-10
QML实现图像处理,包括浮雕、锐化等效果
2017-11-14
Qt下用QSplitter实现滑动窗口
2017-11-16
WebRTC学习之三:录音和播放
2016-12-26
Qt之TCP收发图片的例子 详见博客:https://blog.csdn.net/caoshangpa/article/deta
2024-10-06
Qt通过UDP传图片 实现自定义分包和组包
2024-10-06
Qt国际化(I18N)
2023-12-31
Qt调用OpenGL API实现彩色旋转立方体
2018-05-09
Qt+libVLC+QWidget渲染
2021-02-27
Qt5版Nehe OpenGL教程1-5
2018-05-14
Qt5版NeHe OpenGL教程6-10
2018-05-17
Effective Modern C++ 英文原版(带书签)
2018-01-27
TestUI.rar
2021-02-09
QHOpenGLPlayer.rar
2021-01-10
Qt调用libVLC实现播放器
2021-02-26
Boost.Asio C++ Network Programming随书源码
2018-01-29
MyTcpClient
2018-03-16
QHVlcPlayer.rar
2021-02-27
基于Qt和SDL2播放PCM
2021-01-05
++i和i++哪个更高效
2023-02-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人