自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龚建波

一切都是稍纵即逝的追寻

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

原创 《QDebug 2025年3月》

菜单有时候需要禁用某些选项,使之不可点击,但设置enable:false后就不会更新hover或者highlighted等状态了。可以保留enable:true,自定义过滤hover和点击事件,比如放一个MouseArea在上面拦截点击事件,同时过滤MenuItem的快捷键点击事件。

2025-03-31 23:40:39 217

原创 QSettings::registerFormat 自定义 ini 读写

QSettings 默认不支持 UTF-16 等多字节编码,即便设置 setIniCodec("UTF-16LE") 仍然不能正常解析,但是对于 ASCII 兼容的编码就可以。可能是因为 QSettings 源码中是直接读成 QByteArray 后根据 ASCII 字符来判断分节和内容等信息,设置的 codec 只在判断完之后做字符串转换才会用到。而 Windows 的 Get/WritePrivateProfileStringW 等接口读写 ini 时会用 UTF-16LE 编码

2025-03-24 11:45:59 141

原创 《QDebug 2025年2月》

Qt5 Camera+VideoOutput在安卓设备上旋转问题场景一:APP设置为固定方向显示,这时候VideoOutput显示的画面方向正常,设置autoOrientation也没啥影响。场景二:APP设置为跟随设备旋转,这时候VideoOutput现实的画面可能就和APP的方向不一样了,设置autoOrientation都会有不同的方向问题。我的解决方法是根据设备的实际方向去设置VideoOutput的orientation,可以通过安卓代码获取。

2025-03-02 01:36:34 308

原创 《QDebug 2025年1月》

非百分百DPI缩放时,QFont::setStretch小于100绘制出来的文字效果不对。假如系统百分百缩放,或者Qt关闭了缩放,或者setStretch大于100一切正常;如果是setStretch小于100,DPI缩放还不是百分百的,就重叠了。

2025-01-31 22:34:20 142

原创 《QDebug 2024年12月》

英特尔上编译的QtCipherSqlitePlugin在M系列芯片上崩溃,工程的sqlitecipher.pro文件中QMAKE_CFLAGS += -march=native改成QMAKE_CFLAGS += -maes即可

2024-12-31 23:21:30 414

原创 记录:virt-manager配置Ubuntu arm虚拟机

virt-manager(Virtual Machine Manager)是一个图形用户界面应用程序,通过libvirt管理虚拟机(即作为libvirt的图形前端)。因为要在Linux arm环境做测试,记录下virt-manager配置arm虚拟机的过程。

2024-12-18 01:19:23 1274

原创 《QDebug 2024年11月》

Qt5.15.2 QCamera使用遇到的一些问题:Windows 偶尔遇到画面上下颠倒;MacOS 偶尔遇到打开设备没画面,要重新插拔 USB 相机;MacOS 平台正在播放的 USB 设备拔出之后,切换到其他的设备可能没法正常打开了,同时有打印错误信息:"Runtime camera error"Failed to set active format (lock failed)

2024-12-17 00:20:11 442

原创 《QDebug 2024年10月》

C/C++ 编译器提供了 __DATE__ 和 __TIME__ 预定义宏来获取编译日期和时间,但一般都是增量编译,没有修改过的 cpp 不会重新生成目标文件(Windows .obj/Linux .o),这样就不是实时的编译时间了。参考网友的代码,每次编译链接完成后可以将对应目标文件删除,下次编译时就会重新生成进行链接了。

2024-11-03 05:17:45 1039

原创 《QDebug 2024年9月》

用了tr()翻译但是没生效:首先确定该类是否加了Q_OBJECT宏;其次在加载翻译文件之前已经初始化的变量也需要重新赋值,比如全局变量等。

2024-10-10 00:17:42 487

原创 《QDebug 2024年8月》

Qt中部分预置类型,如QString/QJsonObject,传到QML中使用后,会在适当的时机自动释放;有两个特列是立即释放的:QImage和Pixmap,这两个类型被定义为稀缺资源(Scarce resource)类型;比较奇怪的是QByteArray直到内存爆了也没有自动释放,需要手动调用gc(),这和我们自定义的类型传到QML中的现象是一样的。

2024-08-31 23:59:18 530

原创 《QDebug 2024年7月》

测试环境:Android 13 / 14 + Qt 5.15.2,侧滑返回 Home 时(未关闭程序),如果下方有处理触摸 or 点击事件的对象(如 MouseArea),重新进入软件时,该对象不能再处理触摸 or 点击事件,因为上次只处理了 press 还没处理 release。

2024-07-31 23:45:12 647

原创 《QDebug 2024年6月》

无论是 QML Model 还是 Cpp 的 Model,往 insert(0) 插入新元素时,如果第一个 section 不可见(滚动条往底部滚动一段),会导致布局错误(出现一个新的 section),如果是 >0 的 index 则无此问题

2024-06-30 23:43:58 556 2

原创 QML 实现上浮后消失的提示框

基本效果:上浮逐渐显示,短暂停留后上浮逐渐消失

2024-06-23 04:41:28 776

原创 《QDebug 2024年5月》

QQmlApplicationEngine 如果加载某个组件失败,无法正常初始化窗口,是不会弹出窗口提示的。但是可以通过重定向 qdebug 生成日志或者使用 dbgview 查看输出信息。

2024-06-05 11:50:39 722

原创 《QDebug 2024年4月》

Rectangle 开启 antialiasing抗锯齿或者设置 radius 后(设置 radius 后默认开启抗锯齿),如果位置或者大小某个参数相对 Window 不是整数,边框就会看起来有点糊不是默认的实线了。

2024-04-30 23:50:02 501

原创 《QDebug 2024年3月》

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

2024-03-31 13:00:19 1209

原创 《QDebug 2024年2月》

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

2024-02-29 23:26:54 751

原创 QML用ListView实现带section的GridView

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

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

原创 《QDebug 2024年1月》

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

2024-01-31 22:09:37 976

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

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

2024-01-19 14:53:09 1422

原创 《QDebug 2023年12月》

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

2023-12-31 17:53:26 1484

原创 Qt获取屏幕DPI缩放比

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

2023-12-21 14:31:11 4222

原创 《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 2239

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

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

2023-11-13 15:35:00 2723

原创 Windows枚举设备信息

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

2023-11-13 13:56:21 1834

原创 《QDebug 2023年10月》

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

2023-10-31 23:29:14 1246

原创 《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 1727

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

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

2023-09-20 14:49:47 10464 6

原创 《QDebug 2023年8月》

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

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

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

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

2023-08-16 17:31:31 5113 11

原创 Android Handler 的基本使用

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

2023-08-04 15:29:22 2601

原创 《QDebug 2023年7月》

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

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

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

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

2023-07-17 14:22:48 3315

原创 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 3986

原创 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 4327

原创 《QDebug 2023年6月》

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

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

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

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

2023-06-24 15:55:11 6110 1

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

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

2023-06-09 00:17:27 3461 2

原创 《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 4362 2

原创 《QDebug 2023年4月》

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

2023-04-30 23:47:44 3006

TestGPRC.rar

MSVC2017+GRPC1.36.2(64-bit MD lib)+Qt测试代码,配合博客做示例:https://gongjianbo1992.blog.youkuaiyun.com/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.youkuaiyun.com/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关注的人

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