自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龚建波

一切都是稍纵即逝的追寻

  • 博客(355)
  • 资源 (5)
  • 收藏
  • 关注

原创 《QDebug 2024年3月》

程序做翻译的时候需要找出里面的中文字符进行处理,比如 Qt 框架加上 tr 等。先百度中文的正则范围:[\u4e00-\u9fa5],再在两边加上双引号或者单引号组成最终的正则 ".*[\u4e00-\u9fa5]+.*"。

2024-03-31 13:00:19 825

原创 《QDebug 2024年2月》

QZipReader 是 Qt 源码中的一个私有类,引入gui-private 后可以使用,用来压缩解压 zip 文件。解压时,如果文件名是中文,那可能就没法正常解压这个文件了,因为压缩和解压时对文件名的编码处理不一致。

2024-02-29 23:26:54 383

原创 QML用ListView实现带section的GridView

QML自带的GridView只能定义delegate,没有section,类似手机相册带时间分组标签的样式就没法做。但是ListView是支持section的,可以自定义分组样式,所以可以通过ListView来实现带section的GridView。当然,你也可以直接修改GridView的C++源码给他加上section。

2024-02-05 13:45:41 942 1

原创 《QDebug 2024年1月》

Repeator 在调用 remove 函数之后,对应的 Item 会立即释放,后续就无法访问上下文的属性了

2024-01-31 22:09:37 721

原创 QML Image 通过 QQuickAsyncImageProvider 异步加载图片

根据QQuickImageProvider 的文档说明,该类其实是支持在独立线程中异步加载的,但是 Async 类提供了专用于异步加载的接口,操作起来也不复杂,对于大文件或者网络文件,都可以采用异步方式加载图片。

2024-01-19 14:53:09 792

原创 《QDebug 2023年12月》

Q_REVISION 是 Qt 用来做版本控制的一个宏。以 QQuickWindow 为例,继承后去访问REVISION 标记的 opacity 属性或者Q_REVISION 标记的 closing 信号,会报错提示 is not available

2023-12-31 17:53:26 1181

原创 Qt获取屏幕DPI缩放比

​网上很多代码是用logicalDotsPerInch 除以 96 来获取屏幕缩放比,当使能了缩放适配后,logicalDotsPerInch 值就不随系统缩放变了,我们需要更通用的方式。​

2023-12-21 14:31:11 1875

原创 《QDebug 2023年11月》

Qt5 静态编译参数:configure.bat -platform win32-msvc -opensource -confirm-license -release -static -static-runtime -prefix "D:/Qt/Qt5_Build"

2023-11-30 23:53:20 1674

原创 libusb获取Windows设备实例路径DevicePath

​libusb 当前版本(1.0.26)libusb.h 头文件提供的接口似乎没有办法获取Windows 平台相关的设备实例路径,只是提供了libusb_get_port_numbers 之类的接口来获取拓扑结构。我们可以通过 libusb 源码中平台相关的接口来获取DevicePath,但是使用非公有接口意味着替换版本的时候要注意源码相关的修改。目前找了两种方式:

2023-11-13 15:35:00 1690

原创 Windows枚举设备信息

枚举设备信息主要通过SetupAPI 模块中的接口来实现,配合对应的设备类 GUID。这里以枚举 USB 设备信息为例,包含设备实例地址等:SetupDiEnumDeviceInfo

2023-11-13 13:56:21 967

原创 《QDebug 2023年10月》

QML 中通过 Cpp 函数返回没有 parent 的对象,控制权默认JavaScriptOwnership。作为属性或者带有 parent 的 Cpp 对象在 QML 中默认是CppOwnership。如果函数返回没有 parent 的对象给 QML,不想被意外的 gc 掉,应该主动设置成CppOwnership。

2023-10-31 23:29:14 990

原创 《QDebug 2023年9月》

拖拽时 explorer.exe 向当前进程发 WM_DROPFILES 消息,因为 explorer.exe 默认中等权限低于管理员权限,WM_DROPFILES 的消息被拦截了。这里涉及到 Windows UIPI,即 User Interface Privilege Isolation(用户界面特权隔离),是 Windows Vista 时引入的一种安全特性,用于拦截接收比自身进程 MIC(Mandatory Integrity Control,强制完整性控制)等级还低的进程发来的消息。

2023-09-30 23:25:26 1261

原创 cpp-httplib库的基本使用及文件上传下载

cpp-httplib 是一个header-only 的跨平台 HTTP/HTTPS 网络库,采用 MIT 开源协议,接口为阻塞调用。虽然功能简单,但也不用一堆依赖,C++ 的接口也比 libcurl 的 C 接口用起来顺手一点,文档也提供了不少参考代码,如果是做简单的 HTTP server 或者 client 还是值得一试的。

2023-09-20 14:49:47 4616 3

原创 《QDebug 2023年8月》

本来以为 QWidget 的 screen() 接口返回的是组件自己所在屏幕的 QSreen,实测是所属 Window 所在的屏幕,如果 Window 跨屏了两者所属屏幕可能就不是同一个。获取 QWidget 当前所在屏幕区域可用的代码如下:

2023-08-31 23:33:06 1647 4

原创 LabVIEW调用DLL传递结构体参数

LabVIEW 中调用动态库接口时,如果是值传递的结构体,可以根据字段拆解为多个参数;如果参数为结构体指针,可用簇(Cluster)来匹配,其内存连续相当于单字节对齐。

2023-08-16 17:31:31 2778 1

原创 Android Handler 的基本使用

Handler 允许你发送和处理与线程的 MessageQueue 关联的 Message 和 Runnable 对象。 每个 Handler 实例都与一个线程和该线程的消息队列 (MessageQueue) 相关联。 当你创建一个新的 Handler 时,它会绑定到 Looper。 它将向 Looper 的消息队列传递消息 (Message) 和可运行对象 (Runnable),并在 Looper 的线程上执行它们。

2023-08-04 15:29:22 2037

原创 《QDebug 2023年7月》

Qt5 QSysInfo 在 Win11 上获取的系统信息为 Win10,因为 Win11 需要从OSVERSIONINFOEX 结构体的dwBuildNumber 字段来判断,dwBuildNumber ≥ 22000 时判定为 Win11,而 dwMajorVersion 在 Win10 和 Win11 都是 10。

2023-07-31 14:28:54 1972 1

原创 Flutter 使用 Image.memory 加载位图数据

Image.memory 可以通过 Uint8List 存储的图像字节数据来构造一个 Image 部件,数据的内容需要包含格式头,裸数据他是没法解析的。如果是从文件读取的带格式头的数据,可以直接使用;如果是自己生成或者处理过的位图裸数据,可以自己编码生成位图格式的数据:

2023-07-17 14:22:48 2454

原创 Python venv 和 virtualenv 虚拟环境的基本使用

venv 和 virtualenv 都是搭建虚拟环境的工具,virtualenv 是第三方开源的,而 venv 作为 virtualenv 的一个子集自Python3.3开始集成到标准库中,在 virtualenv 的文档中可以看到他们的区别:没有 app-data 种子方法,可能会更慢;没有那么可扩展;不能指定本机其他 Python 版本,即 virtualenv 的 -p / --python 参数;无法通过 pip 升级;没有那么丰富的编程 API(描述虚拟环境而不创建它们)。

2023-07-14 11:41:29 2867

原创 Qt + QR-Code-generator 生成二维码

之前使用 libgrencode 生成二维码,LGPL 协议实在不方便,所以需要找一个 github 星星多的,代码简单最好 header-only,协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。QR-Code-generator 正好符合这个要求,而且还提供 C / C++ / Java / Python 等多种语言实现,直接把 qrcodegen.hpp / cpp 类文件放到我们项目里就能使用。

2023-07-12 11:18:17 3516

原创 《QDebug 2023年6月》

信号槽多线程传递数据,接收线程来不及处理时的问题假设:A 线程持续从 IO 接收数据,然后传递给 B 线程进行处理,比较完善的写法是会用一个线程安全的队列。但有时为了省事选择直接用信号槽来传递数据,这可能在开发机上没什么问题,正常运行,但到了配置比较低的机器,可能会内存溢出崩掉,或者运行一段时间后崩掉。因为配置低的机器可能处理速度比我们接收的速度慢,这就导致信号槽的异步调用事件一直堆积,如果信号传的数据比较大就会很快内存溢出,如果数据很小也可能会超过事件队列的上限值。

2023-06-30 23:45:51 1961 4

原创 记录:Qt Creator 10配置安卓开发环境

Qt Creator 现在的安卓开发环境配置相比老版本方便了不少,本文以目前在线安装版的 Qt Creator 10.0.2 + Qt 5.15 / Qt 6.5 为例做演示(有些文件可能会因为网络问题需要科学上网才能下载)。

2023-06-24 15:55:11 4293

原创 记录:VS2019+OpenCV4.7.0编译

OpenCV官网提供了动态库的安装包,但是只有64位(编译参数可能是默认的/MD+动态链接),如果需要32位或者静态链接还是得自己编译。

2023-06-09 00:17:27 3078

原创 《QDebug 2023年5月》

Qt5 自定义组件运行后报错:QML Rectangle: The current style does not support customization of this control...1.importQtQuick.Templates 中的类型自定义;2.import QtQuick.Controls.Basic 使用 Basic 样式自定义;3.main 函数设置 QQuickStyle::setStyle("Basic") 全局设置 Basic。

2023-05-29 16:37:55 3755 1

原创 《QDebug 2023年4月》

在 Qt5 中,QML 的 list 类型只提供了 push 添加数据,或者重新赋值,没法 pop。到了 Qt6,实测可以对 list 调用 pop/shift 等操作。Qt5 中可以先将 list 转为 js 的数组,编辑完后再重新赋值回去。

2023-04-30 23:47:44 2763

原创 《QDebug 2023年3月》

mac Qt 默认的 lib 工程 qmake 输出会生成带版本号的软链接。一般我们只需要一个 lib 文件,可以增加设置:CONFIG += unversioned_libname unversioned_sonameunversioned_libname 去掉了 lib 的版本号,unversioned_soname 去掉了链接里的版本号。网上有的是用 CONFIG += plugin,这样写QMAKE_SONAME_PREFIX 设置 rpath 就没生效。

2023-03-31 23:06:00 2547

原创 Qt在Mac上实现USB热插拔检测

Mac 上的 USB 热插拔检测,可以通过 IOKit framework 来实现。但是,USB 插拔消息来的时候,QCamera 还没法枚举到对应的摄像头,这个和 Windows 是一样的,需要注册相机的插拔回调才行。

2023-03-26 16:13:55 2586

原创 Qt for Android:自定义安卓Application和Activity

Qt 自定义安卓 Activity:创建一个 MainActivity.java 文件放到 AndroidManifest.xml 旁的 java 文件夹,在AndroidManifest.xml 中修改原来的 activity 标签的android:name 属性。

2023-03-06 00:52:02 2731

原创 《QDebug 2023年2月》

Windows 上有些接口需要用右斜杠 "\",所以需要把路径中的 "/" 分隔符全部替换。Qt 本身封装了QDir::toNativeSeparators() 静态成员函数来完成这个操作。处理 QTcpSocket 的 disconnected 信号槽连接时,加上 Qt::QueuedConnection 参数

2023-02-28 23:24:15 2899

原创 Qt打开文件夹并选中文件

QDesktopServices::openUrl() 如果参数是文件夹会在资源管理器打开,如果参数是文件会用默认打开方式打开,不符合需求。想要打开文件夹并选中文件,在 Windows 上可以用 QProcess 执行 explorer 命令:

2023-02-27 01:27:41 5278 1

原创 《QDebug 2023年1月》

QSettings用不同的编码写不同字段会导致中文乱码因为配置文件需要先读取并解析,更新值后重新覆写整个文件,不是直接插入到中间的,所以用不同的编码读取后,中文字符已经解析错误了,即使更新的不是乱码的字段,但由于是整个文件重新写入,所以还是会乱码。

2023-01-31 23:11:40 2102

原创 Qt在Windows上的设备热插拔检测

一般 Qt 在 Windows 上做设备热插拔需要两个步骤:1.使用 win32 的 RegisterDeviceNotification 函数注册要监听的设备类别,需要绑定一个窗口 id;2.重写 QWidget 的nativeEvent 虚函数或者QAbstractNativeEventFilter 的nativeEventFilter 虚函数,处理热插拔相关的回调。后来参考别人的代码,可以创建一个 win32 的隐藏窗口来接收消息,这样就不用耦合到 Qt 界面上的窗口了。

2023-01-16 11:54:02 2877

原创 Windows上让Qt5 QCamera响应UVC摄像头硬件按钮拍图

QCamera相机类提供了一些基本的功能,包括拍照和录制功能(Windows上不支持录制视频),但也有很多接口是没有封装的,比如有些UVC摄像头有物理按键,可以进行拍图等操作,但是QCamera没法响应硬件按钮的拍图操作。想让QCamera响应硬件按钮的拍图操作,只需要修改下directshow这个插件即可,而其他的视频渲染等功能就不用自己封装了。

2023-01-15 18:25:42 3130 7

原创 在QML中使用QtWidgets的QFileDialog

QML 中虽然也提供了 FileDialog 组件,但是使用体验远不如 QtWidgets 中的 QFileDialog,故做了简单的封装,使得可以在 QML 中使用QFileDialog 来选择文件或者文件夹。因为文档提示不应直接在 QML 逻辑中启用自己的事件循环,所以我是通过信号槽来弹出和传递返回结果,操作流程和 QML 的 FileDialog 类似。

2023-01-02 16:09:35 2036

原创 《QDebug 2022年12月》

在 C++ 中关联 QQuickWindow 的 closing 信号提示 "使用了未定义类型QQuickCloseEvent",因为 closing 信号中的参数类型是 private 模块中定义的,但是通过第二句提示我们知道找到了完整定义才能使用 Q_DECLARE_METATYPE(T*) ,而Qt 提供了不透明指针宏 Q_DECLARE_OPAQUE_POINTER ,使得应用Q_DECLARE_METATYPE(T*) 时不必找到完整定义。加上此宏后即可以编译通过,只是不能接收这个参数。

2022-12-31 23:55:49 2581

原创 QML Image 通过 QQuickImageProvider 加载图片

QML 中使用 Image 来加载图片,有三种加载方式:从 Qt 资源系统加载;文件加载;由 ImageProvider 提供数据。通过 ImageProvider,我们可以将内存中的图像由 QML Image 呈现。当然,如果单纯是想渲染内存中的图像数据,也可以直接用 QQuickItem 或者 QQuickPaintedItem 等。

2022-12-25 23:26:24 2649

转载 24种 JavaScript 循环遍历方法

今天我们来看点基础知识,看看JavaScript中的那些循环遍历方法

2022-12-25 21:57:27 5895

原创 Qt实现程序重启功能

主要逻辑就是退出当前进程,QProcess::startDetached 开启新的进程

2022-11-30 23:11:26 3036

原创 《QDebug 2022年11月》

当使用 QApplication 而不是 QGuiApplication 时,MessageDialog 的accepted、rejected 信号会触发两次,一种替代方案是使用Qt.labs.platform 模块的 MessageDialog。

2022-11-30 22:40:35 1354

原创 QML实现图片拖入拖出、剪贴板复制粘贴

QML 中提供了DropArea 类型来处理拖放,使用containsDrag 属性判断是否有拖拽动作,使用 dropped(DragEvent drop) 信号处理拖拽的释放动作,此信号带一个DragEvent 参数,可以从中获取拖放的内容。如果拖放的是文件,可以通过DragEvent 的 urls 属性取文件路径列表,再将路径设置给 Image source。

2022-11-26 23:42:17 2604 1

TestGPRC.rar

MSVC2017+GRPC1.36.2(64-bit MD lib)+Qt测试代码,配合博客做示例:https://gongjianbo1992.blog.csdn.net/article/details/114577010

2021-03-09

SilkToWav_VS2017.rar

SILK SDK+Qt 将微信/QQ的silk格式音频转换为wav(pcm s16)格式,包含VS SDK工程和Qt应用工程,git链接(https://github.com/gongjianbo/MyTestCode/tree/master/Qt/SilkToWav)

2020-11-30

GetAudioInfo_VS2017x64.rar

FFmpeg+Qt 从音频文件取PCM数据,使用重采样的方式转换为指定格式,git链接(https://github.com/gongjianbo/MyTestCode/tree/master/Qt/GetAudioInfo)2022-08-25更新

2020-11-25

QML与C++交互,解压后路径去掉中文.rar

博客的相关代码,演示QML与C++的交互。博客地址https://blog.csdn.net/gongjianbo1992/article/details/87965925

2020-06-26

QTableViewMoveAction.rar

QTableView拖拽交换行、列、单元格源码,GitHub链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/QTableViewMoveAction

2020-06-23

空空如也

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

TA关注的人

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