- 博客(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
原创 《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
原创 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
2021-03-09
SilkToWav_VS2017.rar
2020-11-30
GetAudioInfo_VS2017x64.rar
2020-11-25
QML与C++交互,解压后路径去掉中文.rar
2020-06-26
QTableViewMoveAction.rar
2020-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人