- 博客(363)
- 资源 (5)
- 收藏
- 关注
原创 《QDebug 2024年10月》
C/C++ 编译器提供了 __DATE__ 和 __TIME__ 预定义宏来获取编译日期和时间,但一般都是增量编译,没有修改过的 cpp 不会重新生成目标文件(Windows .obj/Linux .o),这样就不是实时的编译时间了。参考网友的代码,每次编译链接完成后可以将对应目标文件删除,下次编译时就会重新生成进行链接了。
2024-11-03 05:17:45 454
原创 《QDebug 2024年9月》
用了tr()翻译但是没生效:首先确定该类是否加了Q_OBJECT宏;其次在加载翻译文件之前已经初始化的变量也需要重新赋值,比如全局变量等。
2024-10-10 00:17:42 360
原创 《QDebug 2024年8月》
Qt中部分预置类型,如QString/QJsonObject,传到QML中使用后,会在适当的时机自动释放;有两个特列是立即释放的:QImage和Pixmap,这两个类型被定义为稀缺资源(Scarce resource)类型;比较奇怪的是QByteArray直到内存爆了也没有自动释放,需要手动调用gc(),这和我们自定义的类型传到QML中的现象是一样的。
2024-08-31 23:59:18 432
原创 《QDebug 2024年7月》
测试环境:Android 13 / 14 + Qt 5.15.2,侧滑返回 Home 时(未关闭程序),如果下方有处理触摸 or 点击事件的对象(如 MouseArea),重新进入软件时,该对象不能再处理触摸 or 点击事件,因为上次只处理了 press 还没处理 release。
2024-07-31 23:45:12 560
原创 《QDebug 2024年6月》
无论是 QML Model 还是 Cpp 的 Model,往 insert(0) 插入新元素时,如果第一个 section 不可见(滚动条往底部滚动一段),会导致布局错误(出现一个新的 section),如果是 >0 的 index 则无此问题
2024-06-30 23:43:58 467 2
原创 《QDebug 2024年5月》
QQmlApplicationEngine 如果加载某个组件失败,无法正常初始化窗口,是不会弹出窗口提示的。但是可以通过重定向 qdebug 生成日志或者使用 dbgview 查看输出信息。
2024-06-05 11:50:39 622
原创 《QDebug 2024年4月》
Rectangle 开启 antialiasing抗锯齿或者设置 radius 后(设置 radius 后默认开启抗锯齿),如果位置或者大小某个参数相对 Window 不是整数,边框就会看起来有点糊不是默认的实线了。
2024-04-30 23:50:02 399
原创 《QDebug 2024年3月》
程序做翻译的时候需要找出里面的中文字符进行处理(IDE搜索中文),比如 Qt 框架加上 tr 等。先百度中文的正则范围:[\u4e00-\u9fa5],再在两边加上双引号或者单引号组成最终的正则 ".*[\u4e00-\u9fa5]+.*"。
2024-03-31 13:00:19 1123
原创 《QDebug 2024年2月》
QZipReader 是 Qt 源码中的一个私有类,引入gui-private 后可以使用,用来压缩解压 zip 文件。解压时,如果文件名是中文,那可能就没法正常解压这个文件了,因为压缩和解压时对文件名的编码处理不一致。
2024-02-29 23:26:54 687
原创 QML用ListView实现带section的GridView
QML自带的GridView只能定义delegate,没有section,类似手机相册带时间分组标签的样式就没法做。但是ListView是支持section的,可以自定义分组样式,所以可以通过ListView来实现带section的GridView。当然,你也可以直接修改GridView的C++源码给他加上section。
2024-02-05 13:45:41 1638 1
原创 QML Image 通过 QQuickAsyncImageProvider 异步加载图片
根据QQuickImageProvider 的文档说明,该类其实是支持在独立线程中异步加载的,但是 Async 类提供了专用于异步加载的接口,操作起来也不复杂,对于大文件或者网络文件,都可以采用异步方式加载图片。
2024-01-19 14:53:09 1218
原创 《QDebug 2023年12月》
Q_REVISION 是 Qt 用来做版本控制的一个宏。以 QQuickWindow 为例,继承后去访问REVISION 标记的 opacity 属性或者Q_REVISION 标记的 closing 信号,会报错提示 is not available
2023-12-31 17:53:26 1406
原创 Qt获取屏幕DPI缩放比
网上很多代码是用logicalDotsPerInch 除以 96 来获取屏幕缩放比,当使能了缩放适配后,logicalDotsPerInch 值就不随系统缩放变了,我们需要更通用的方式。
2023-12-21 14:31:11 3505
原创 《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 1996
原创 libusb获取Windows设备实例路径DevicePath
libusb 当前版本(1.0.26)libusb.h 头文件提供的接口似乎没有办法获取Windows 平台相关的设备实例路径,只是提供了libusb_get_port_numbers 之类的接口来获取拓扑结构。我们可以通过 libusb 源码中平台相关的接口来获取DevicePath,但是使用非公有接口意味着替换版本的时候要注意源码相关的修改。目前找了两种方式:
2023-11-13 15:35:00 2386
原创 Windows枚举设备信息
枚举设备信息主要通过SetupAPI 模块中的接口来实现,配合对应的设备类 GUID。这里以枚举 USB 设备信息为例,包含设备实例地址等:SetupDiEnumDeviceInfo
2023-11-13 13:56:21 1588
原创 《QDebug 2023年10月》
QML 中通过 Cpp 函数返回没有 parent 的对象,控制权默认JavaScriptOwnership。作为属性或者带有 parent 的 Cpp 对象在 QML 中默认是CppOwnership。如果函数返回没有 parent 的对象给 QML,不想被意外的 gc 掉,应该主动设置成CppOwnership。
2023-10-31 23:29:14 1202
原创 《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 1605
原创 cpp-httplib库的基本使用及文件上传下载
cpp-httplib 是一个header-only 的跨平台 HTTP/HTTPS 网络库,采用 MIT 开源协议,接口为阻塞调用。虽然功能简单,但也不用一堆依赖,C++ 的接口也比 libcurl 的 C 接口用起来顺手一点,文档也提供了不少参考代码,如果是做简单的 HTTP server 或者 client 还是值得一试的。
2023-09-20 14:49:47 8474 4
原创 《QDebug 2023年8月》
本来以为 QWidget 的 screen() 接口返回的是组件自己所在屏幕的 QSreen,实测是所属 Window 所在的屏幕,如果 Window 跨屏了两者所属屏幕可能就不是同一个。获取 QWidget 当前所在屏幕区域可用的代码如下:
2023-08-31 23:33:06 1887 4
原创 LabVIEW调用DLL传递结构体参数
LabVIEW 中调用动态库接口时,如果是值传递的结构体,可以根据字段拆解为多个参数;如果参数为结构体指针,可用簇(Cluster)来匹配,其内存连续相当于单字节对齐。
2023-08-16 17:31:31 4159 8
原创 Android Handler 的基本使用
Handler 允许你发送和处理与线程的 MessageQueue 关联的 Message 和 Runnable 对象。 每个 Handler 实例都与一个线程和该线程的消息队列 (MessageQueue) 相关联。 当你创建一个新的 Handler 时,它会绑定到 Looper。 它将向 Looper 的消息队列传递消息 (Message) 和可运行对象 (Runnable),并在 Looper 的线程上执行它们。
2023-08-04 15:29:22 2441
原创 《QDebug 2023年7月》
Qt5 QSysInfo 在 Win11 上获取的系统信息为 Win10,因为 Win11 需要从OSVERSIONINFOEX 结构体的dwBuildNumber 字段来判断,dwBuildNumber ≥ 22000 时判定为 Win11,而 dwMajorVersion 在 Win10 和 Win11 都是 10。
2023-07-31 14:28:54 2088 1
原创 Flutter 使用 Image.memory 加载位图数据
Image.memory 可以通过 Uint8List 存储的图像字节数据来构造一个 Image 部件,数据的内容需要包含格式头,裸数据他是没法解析的。如果是从文件读取的带格式头的数据,可以直接使用;如果是自己生成或者处理过的位图裸数据,可以自己编码生成位图格式的数据:
2023-07-17 14:22:48 3017
原创 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 3486
原创 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 3990
原创 《QDebug 2023年6月》
信号槽多线程传递数据,接收线程来不及处理时的问题假设:A 线程持续从 IO 接收数据,然后传递给 B 线程进行处理,比较完善的写法是会用一个线程安全的队列。但有时为了省事选择直接用信号槽来传递数据,这可能在开发机上没什么问题,正常运行,但到了配置比较低的机器,可能会内存溢出崩掉,或者运行一段时间后崩掉。因为配置低的机器可能处理速度比我们接收的速度慢,这就导致信号槽的异步调用事件一直堆积,如果信号传的数据比较大就会很快内存溢出,如果数据很小也可能会超过事件队列的上限值。
2023-06-30 23:45:51 2031 4
原创 记录:Qt Creator 10配置安卓开发环境
Qt Creator 现在的安卓开发环境配置相比老版本方便了不少,本文以目前在线安装版的 Qt Creator 10.0.2 + Qt 5.15 / Qt 6.5 为例做演示(有些文件可能会因为网络问题需要科学上网才能下载)。
2023-06-24 15:55:11 5423 1
原创 记录:VS2019+OpenCV4.7.0编译
OpenCV官网提供了动态库的安装包,但是只有64位(编译参数可能是默认的/MD+动态链接),如果需要32位或者静态链接还是得自己编译。
2023-06-09 00:17:27 3303 1
原创 《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 4222 1
原创 《QDebug 2023年4月》
在 Qt5 中,QML 的 list 类型只提供了 push 添加数据,或者重新赋值,没法 pop。到了 Qt6,实测可以对 list 调用 pop/shift 等操作。Qt5 中可以先将 list 转为 js 的数组,编辑完后再重新赋值回去。
2023-04-30 23:47:44 2919
原创 《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 2655
原创 Qt在Mac上实现USB热插拔检测
Mac 上的 USB 热插拔检测,可以通过 IOKit framework 来实现。但是,USB 插拔消息来的时候,QCamera 还没法枚举到对应的摄像头,这个和 Windows 是一样的,需要注册相机的插拔回调才行。
2023-03-26 16:13:55 2819
原创 Qt for Android:自定义安卓Application和Activity
Qt 自定义安卓 Activity:创建一个 MainActivity.java 文件放到 AndroidManifest.xml 旁的 java 文件夹,在AndroidManifest.xml 中修改原来的 activity 标签的android:name 属性。
2023-03-06 00:52:02 3172
原创 《QDebug 2023年2月》
Windows 上有些接口需要用右斜杠 "\",所以需要把路径中的 "/" 分隔符全部替换。Qt 本身封装了QDir::toNativeSeparators() 静态成员函数来完成这个操作。处理 QTcpSocket 的 disconnected 信号槽连接时,加上 Qt::QueuedConnection 参数
2023-02-28 23:24:15 2953
原创 Qt打开文件夹并选中文件
QDesktopServices::openUrl() 如果参数是文件夹会在资源管理器打开,如果参数是文件会用默认打开方式打开,不符合需求。想要打开文件夹并选中文件,在 Windows 上可以用 QProcess 执行 explorer 命令:
2023-02-27 01:27:41 5881 4
原创 《QDebug 2023年1月》
QSettings用不同的编码写不同字段会导致中文乱码因为配置文件需要先读取并解析,更新值后重新覆写整个文件,不是直接插入到中间的,所以用不同的编码读取后,中文字符已经解析错误了,即使更新的不是乱码的字段,但由于是整个文件重新写入,所以还是会乱码。
2023-01-31 23:11:40 2259
原创 Qt在Windows上的设备热插拔检测
一般 Qt 在 Windows 上做设备热插拔需要两个步骤:1.使用 win32 的 RegisterDeviceNotification 函数注册要监听的设备类别,需要绑定一个窗口 id;2.重写 QWidget 的nativeEvent 虚函数或者QAbstractNativeEventFilter 的nativeEventFilter 虚函数,处理热插拔相关的回调。后来参考别人的代码,可以创建一个 win32 的隐藏窗口来接收消息,这样就不用耦合到 Qt 界面上的窗口了。
2023-01-16 11:54:02 3358
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关注的人