《QDebug 2024年10月》 C/C++ 编译器提供了 __DATE__ 和 __TIME__ 预定义宏来获取编译日期和时间,但一般都是增量编译,没有修改过的 cpp 不会重新生成目标文件(Windows .obj/Linux .o),这样就不是实时的编译时间了。参考网友的代码,每次编译链接完成后可以将对应目标文件删除,下次编译时就会重新生成进行链接了。
《QDebug 2024年8月》 Qt中部分预置类型,如QString/QJsonObject,传到QML中使用后,会在适当的时机自动释放;有两个特列是立即释放的:QImage和Pixmap,这两个类型被定义为稀缺资源(Scarce resource)类型;比较奇怪的是QByteArray直到内存爆了也没有自动释放,需要手动调用gc(),这和我们自定义的类型传到QML中的现象是一样的。
《QDebug 2024年7月》 测试环境:Android 13 / 14 + Qt 5.15.2,侧滑返回 Home 时(未关闭程序),如果下方有处理触摸 or 点击事件的对象(如 MouseArea),重新进入软件时,该对象不能再处理触摸 or 点击事件,因为上次只处理了 press 还没处理 release。
《QDebug 2024年6月》 无论是 QML Model 还是 Cpp 的 Model,往 insert(0) 插入新元素时,如果第一个 section 不可见(滚动条往底部滚动一段),会导致布局错误(出现一个新的 section),如果是 >0 的 index 则无此问题
《QDebug 2024年5月》 QQmlApplicationEngine 如果加载某个组件失败,无法正常初始化窗口,是不会弹出窗口提示的。但是可以通过重定向 qdebug 生成日志或者使用 dbgview 查看输出信息。
《QDebug 2024年4月》 Rectangle 开启 antialiasing抗锯齿或者设置 radius 后(设置 radius 后默认开启抗锯齿),如果位置或者大小某个参数相对 Window 不是整数,边框就会看起来有点糊不是默认的实线了。
《QDebug 2024年3月》 程序做翻译的时候需要找出里面的中文字符进行处理(IDE搜索中文),比如 Qt 框架加上 tr 等。先百度中文的正则范围:[\u4e00-\u9fa5],再在两边加上双引号或者单引号组成最终的正则 ".*[\u4e00-\u9fa5]+.*"。
《QDebug 2024年2月》 QZipReader 是 Qt 源码中的一个私有类,引入gui-private 后可以使用,用来压缩解压 zip 文件。解压时,如果文件名是中文,那可能就没法正常解压这个文件了,因为压缩和解压时对文件名的编码处理不一致。
QML用ListView实现带section的GridView QML自带的GridView只能定义delegate,没有section,类似手机相册带时间分组标签的样式就没法做。但是ListView是支持section的,可以自定义分组样式,所以可以通过ListView来实现带section的GridView。当然,你也可以直接修改GridView的C++源码给他加上section。
QML Image 通过 QQuickAsyncImageProvider 异步加载图片 根据QQuickImageProvider 的文档说明,该类其实是支持在独立线程中异步加载的,但是 Async 类提供了专用于异步加载的接口,操作起来也不复杂,对于大文件或者网络文件,都可以采用异步方式加载图片。
《QDebug 2023年12月》 Q_REVISION 是 Qt 用来做版本控制的一个宏。以 QQuickWindow 为例,继承后去访问REVISION 标记的 opacity 属性或者Q_REVISION 标记的 closing 信号,会报错提示 is not available
Qt获取屏幕DPI缩放比 网上很多代码是用logicalDotsPerInch 除以 96 来获取屏幕缩放比,当使能了缩放适配后,logicalDotsPerInch 值就不随系统缩放变了,我们需要更通用的方式。
《QDebug 2023年11月》 Qt5 静态编译参数:configure.bat -platform win32-msvc -opensource -confirm-license -release -static -static-runtime -prefix "D:/Qt/Qt5_Build"
libusb获取Windows设备实例路径DevicePath libusb 当前版本(1.0.26)libusb.h 头文件提供的接口似乎没有办法获取Windows 平台相关的设备实例路径,只是提供了libusb_get_port_numbers 之类的接口来获取拓扑结构。我们可以通过 libusb 源码中平台相关的接口来获取DevicePath,但是使用非公有接口意味着替换版本的时候要注意源码相关的修改。目前找了两种方式:
Windows枚举设备信息 枚举设备信息主要通过SetupAPI 模块中的接口来实现,配合对应的设备类 GUID。这里以枚举 USB 设备信息为例,包含设备实例地址等:SetupDiEnumDeviceInfo
《QDebug 2023年10月》 QML 中通过 Cpp 函数返回没有 parent 的对象,控制权默认JavaScriptOwnership。作为属性或者带有 parent 的 Cpp 对象在 QML 中默认是CppOwnership。如果函数返回没有 parent 的对象给 QML,不想被意外的 gc 掉,应该主动设置成CppOwnership。
《QDebug 2023年9月》 拖拽时 explorer.exe 向当前进程发 WM_DROPFILES 消息,因为 explorer.exe 默认中等权限低于管理员权限,WM_DROPFILES 的消息被拦截了。这里涉及到 Windows UIPI,即 User Interface Privilege Isolation(用户界面特权隔离),是 Windows Vista 时引入的一种安全特性,用于拦截接收比自身进程 MIC(Mandatory Integrity Control,强制完整性控制)等级还低的进程发来的消息。