- 博客(331)
- 资源 (5)
- 收藏
- 关注
原创 《QDebug 2023年4月》
在 Qt5 中,QML 的 list 类型只提供了 push 添加数据,或者重新赋值,没法 pop。到了 Qt6,实测可以对 list 调用 pop/shift 等操作。Qt5 中可以先将 list 转为 js 的数组,编辑完后再重新赋值回去。
2023-04-30 23:47:44
820
原创 《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
708
原创 Qt在Mac上实现USB热插拔检测
Mac 上的 USB 热插拔检测,可以通过 IOKit framework 来实现。但是,USB 插拔消息来的时候,QCamera 还没法枚举到对应的摄像头,这个和 Windows 是一样的,需要注册相机的插拔回调才行。
2023-03-26 16:13:55
535
原创 Qt for Android:自定义Activity
创建一个 MainActivity.java 文件放到AndroidManifest.xml 旁的 java 文件夹,在AndroidManifest.xml 中修改原来的 activity 标签的android:name 属性。
2023-03-06 00:52:02
596
原创 《QDebug 2023年2月》
Windows 上有些接口需要用右斜杠 "\",所以需要把路径中的 "/" 分隔符全部替换。Qt 本身封装了QDir::toNativeSeparators() 静态成员函数来完成这个操作。处理 QTcpSocket 的 disconnected 信号槽连接时,加上 Qt::QueuedConnection 参数
2023-02-28 23:24:15
1534
原创 Qt打开文件夹并选中文件
QDesktopServices::openUrl() 如果参数是文件夹会在资源管理器打开,如果参数是文件会用默认打开方式打开,不符合需求。想要打开文件夹并选中文件,在 Windows 上可以用 QProcess 执行 explorer 命令:
2023-02-27 01:27:41
1269
原创 《QDebug 2023年1月》
QSettings用不同的编码写不同字段会导致中文乱码因为配置文件需要先读取并解析,更新值后重新覆写整个文件,不是直接插入到中间的,所以用不同的编码读取后,中文字符已经解析错误了,即使更新的不是乱码的字段,但由于是整个文件重新写入,所以还是会乱码。Qt DPI适配,在qt.conf文件中加上如下配置:[Platforms]WindowsArguments = dpiawareness=0
2023-01-31 23:11:40
834
原创 Qt在Windows上的设备热插拔检测
一般 Qt 在 Windows 上做设备热插拔需要两个步骤:1.使用 win32 的 RegisterDeviceNotification 函数注册要监听的设备类别,需要绑定一个窗口 id;2.重写 QWidget 的nativeEvent 虚函数或者QAbstractNativeEventFilter 的nativeEventFilter 虚函数,处理热插拔相关的回调。后来参考别人的代码,可以创建一个 win32 的隐藏窗口来接收消息,这样就不用耦合到 Qt 界面上的窗口了。
2023-01-16 11:54:02
986
原创 Windows上让Qt5 QCamera响应UVC摄像头硬件按钮拍图
QCamera相机类提供了一些基本的功能,包括拍照和录制功能(Windows上不支持录制视频),但也有很多接口是没有封装的,比如有些UVC摄像头有物理按键,可以进行拍图等操作,但是QCamera没法响应硬件按钮的拍图操作。想让QCamera响应硬件按钮的拍图操作,只需要修改下directshow这个插件即可,而其他的视频渲染等功能就不用自己封装了。
2023-01-15 18:25:42
1382
7
原创 在QML中使用QtWidgets的QFileDialog
QML 中虽然也提供了 FileDialog 组件,但是使用体验远不如 QtWidgets 中的 QFileDialog,故做了简单的封装,使得可以在 QML 中使用QFileDialog 来选择文件或者文件夹。因为文档提示不应直接在 QML 逻辑中启用自己的事件循环,所以我是通过信号槽来弹出和传递返回结果,操作流程和 QML 的 FileDialog 类似。
2023-01-02 16:09:35
796
原创 《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
1497
原创 QML Image 通过 QQuickImageProvider 加载图片
QML 中使用 Image 来加载图片,有三种加载方式:从 Qt 资源系统加载;文件加载;由 ImageProvider 提供数据。通过 ImageProvider,我们可以将内存中的图像由 QML Image 呈现。当然,如果单纯是想渲染内存中的图像数据,也可以直接用 QQuickItem 或者 QQuickPaintedItem 等。
2022-12-25 23:26:24
985
原创 《QDebug 2022年11月》
当使用 QApplication 而不是 QGuiApplication 时,MessageDialog 的accepted、rejected 信号会触发两次,一种替代方案是使用Qt.labs.platform 模块的 MessageDialog。
2022-11-30 22:40:35
828
原创 QML实现图片拖入拖出、剪贴板复制粘贴
代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qml/TestQml_20221125_CopyPaste
2022-11-26 23:42:17
1144
原创 Qt5 QML TreeView currentIndex当前选中项的一些问题
Qt5 QML Controls1.4中的 TreeView 存在诸多问题,比如节点连接的虚线不好实现,currentIndex 的设置和 changed 信号的触发等。我想主要的原因在于 TreeView 是派生自 BasicTableView,而 TableView 内部又是由 ListView 实现的。
2022-11-21 00:59:22
1421
原创 《QDebug 2022年10月》
CMake和qmake判断Qt版本if(QT_VERSION VERSION_LESS 5.15.0) message("< Qt5.15")else() message(">= Qt5.15")endif()
2022-10-31 23:30:22
733
原创 《QDebug 2022年9月》
3.Visual Studio 使用 editorconfig 设置创建的文件编码为 utf-8VS 里创建的文件一般是根据 locale 来确定编码的,比如中文环境一般是 gb2312。VS 本身可以单个修改文件编码为 utf8,或者使用插件。目前版本的 VS 还支持editorconfig 配置文件,相比插件更加灵活,且支持很多 IDE(Qt Creator 这个垃圾貌似还不支持,但是可以装对应的开源插件)。
2022-09-27 12:58:21
839
原创 Qt+FFmpeg解视频帧转为QImage
遇到的小问题:1.用 avcodec_receive_frame 获取解码后的帧数据,返回 AVERROR(EAGAIN) (值为-11),文档描述为:输出在此状态下不可用-用户必须尝试发送新输入,所以加了个 continue 循环执行avcodec_send_packet,直到可用。2.sws_scale视频像素格式和分辨率转换的输出可以直接用字节缓冲区接收,不一定非要把缓冲区 attach 到 AVFrame 上。
2022-09-21 13:53:01
1263
1
原创 QML与C++之间的函数回调
C++可以通过QMetaObject::invokeMethod或者信号槽调用QML中定义的函数,需要先通过engine查找到这个QML对象,或者传递QML对象给C++。QML可以调用C++对象的信号槽或者Q_INVOKABLE注册过的函数。C++使用QJSValue类型接收QML中的函数参数,再调用QJSValue::call执行这个JS函数。如果是C++函数作为QML的回调函数就比较简单了,Q_INVOKABLE注册过的函数可以在QML中直接调用,和QML中定义的JS函数使用方式一致。
2022-09-08 18:35:13
1204
原创 离职总结(2022-9-5)
2022年9月2日,是在这家公司的最后一天,从2020年11月2日入职算起,也不到两年的时间。离职前加班加点的赶工了一个月把最后一个版本完成了(周末在赶,晚上一两点还在赶那种),本来这个版本可以不做早点走人的,但是之前的代码确实写的不好(有我自身水平低的原因,也有多人交叉修改代码的原因),所以重构了一些代码,这样别人改起来也方便一点。离职之后打算先休息一段时间再找工作,期间进行一些总结和学习,反正单身狗也没有房贷和婚姻的压力。
2022-09-05 16:07:28
4083
15
原创 《QDebug 2022年8月》
对于一些透明或者半透明的QWidget,可能需要点击其下方的按钮或其他组件,但是QWidget本身是会接收这些鼠标事件的,需要一些额外的处理。下面是百度到的一些方法:方式A.设置setAttribute(Qt::WA_TransparentForMouseEvents, true),设置之后该QWidget对象树就不再处理鼠标事件。最大的缺点就是不仅该QWidget不响应鼠标事件,它上面的其他组件也没法响应鼠标事件了。...
2022-08-31 22:43:38
465
1
原创 cv::Mat与QImage的互相转换
OpenCV 的 cv::Mat 和 Qt 的 QImage 的转换很简单,网上也很多参考,这里只是记录一下。转换的时候除了要关注构造参数中的图像宽高、存储精度、通道数和通道顺序外,大小端也需要注意。如 QImage::Format_ARGB32 是用 32 位整形存储一个像素,虽然写的是 ARGB 顺序,但是由于存储大小端的关系,PC 一般小端存储,所以字节顺序成了 BGRA。直接通过数据指针构造 QImage 是复用的原来的内存,要注意释放顺序,也可以 copy 拷贝一份,cv::Mat 同理。
2022-08-30 01:35:29
2441
5
原创 《QDebug 2022年7月》
在数组的开头有一个逗号,或者中间两个连续的逗号,都会多出一个undefined的元素(除了尾部多一个逗号没啥影响),一不小心多写或者少删了一个逗号都可能导致逻辑错误,因为这种定义目前是不会报警告的。...
2022-07-31 22:44:36
267
原创 Qt程序设计:多个View共享数据
当多个 View 展示同一个数据集中的部分数据项时,其中一个 View 进行了增删改操作,也需要同步到其他的 View。有两种比较简单的解决方案:方案一:共用一个 Model 实例,通过 Proxy 来辅助完成过滤和选择等操作。方案二:多个Model 持有同一组数据项指针(建议用智能指针),更新之后通知所有关联的 View 进行同步刷新。...............
2022-07-11 00:10:05
986
3
原创 Qt音频相关类升级到Qt6之后的一些变化
Qt6 重构了多媒体模块,一些接口也随之变动,本文记录用到的部分音频相关类的变化。(PS:Qt6.2 该模块才回归,模块名未变,依旧是 multimedia)
2022-07-07 00:33:14
1221
1
原创 《QDebug 2022年6月》
环境:Window10 MSVC2019 Qt5.15.2-64bit(更低的版本也会)现象:笔记本+扩展屏有两个屏幕,Windows 设置的主屏上可以正常显示 QML 的 Window 窗口,辅屏上则会在启动时卡死(一个黑色或者白色的窗口卡死在那里;默认操作焦点在哪个屏幕就会在哪个屏幕弹出窗口,所以程序拖到对应屏幕下启动即可)。禁用掉笔记本自带的集成显卡后,在主屏和辅屏都能正常启动了。
2022-06-22 00:34:28
394
原创 Qt Quick 3D学习:鼠标拾取物体
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议)Qt Creator 中有一个 picking 的示例,用于演示 View3D 中物体的拾取:在示例基础上,我又加了一个简单的拖动效果
2022-06-11 23:24:00
944
原创 Qt Quick 3D学习:使用鼠标键盘控制节点位置和方向
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议)Qt Quick 3D 模块提供了 WasdController 类型来控制节点的位置和方向,受控节点一般是 Camera。(文档:https://doc.qt.io/qt-6/qml-qtquick3d-helpers-wasdcontroller.html)......
2022-06-11 00:27:13
697
原创 Qt Quick 3D学习:模型加载
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议)Qt Quick 3D 模块提供了 Model 类型用于 3D 模型加载,通过设置 source 的资源路径来加载对应的 3D 模型。
2022-06-04 18:14:02
1957
1
原创 《QDebug 2022年5月》
一、Qt Widgets 问题交流1.升级Qt6后,QTableView::indicator样式表没生效之前的样式: ui->tableWidget->setStyleSheet( "QTableView::indicator{width:24px; height:24px;} " "QTableView::indicator:checked{image:url(:/SwitchOn.png);} "
2022-05-29 16:46:52
293
原创 Qt示例学习:OpenGL Under QML
0.前言Qt Creator 中提供了两个 QML 和 OpenGL 混合使用的示例。示例 "fbo" 是在帧缓冲对象(FBO)上渲染小部件,可以和已有的 QML Item 混合使用;示例 "opengl under qml" 是在 QML Item 渲染之前或之后绘制自定义的 OpenGL 内容,是对整个 Window 操作,和 QML Item 一起用比较麻烦,不是处于最底层就是浮在表面。在 Qt Creator 搜索 opengl under qml,或者源码示例中查找Qt 安装后示例
2022-05-14 16:45:19
1190
1
原创 Qt6属性绑定
基本使用(详见官方博文:All about property bindings in Qt 6.2)在 QML 中,我们可以通过属性绑定使得关联的属性自动更新。如下的代码片段使得 height 绑定到 width,当 wdith值变化时,height 的值也能根据绑定的表达式重新计算:import QtQuick 2.15Rectangle { width: 10 height: width}在 Qt6 中,属性绑定这一机制也被引入到了 Qt C++,将上面 QML.
2022-05-02 18:33:52
764
原创 《QDebug 2022年4月》
一、Qt Widgets 问题交流二、Qt Quick 问题交流1.Dialog 或 Popup 弹框位置默认可以设置到 Window 可视范围外(测试版本,Qt5.12和Qt5.15)Dialog 或者 Popup 的位置默认是可以设置到 Window 可视范围之外的,这就导致弹框显示不完整。如图:但是给弹框设置 margin 大于等于 0 之后就会被限定在 Window 范围内,这样我们在自定义弹框拖动的时候就不用判断是否超出边界了。代码如下:import QtQu..
2022-04-30 01:11:45
389
原创 Qt6 QML TreeView 基本使用
Qt6.3 终于新增了一个 TreeView,之前 Controls1 中的 TreeView 废弃后,一直没出新的 TreeView 组件。先不说这个新的 TreeView 是继承自 TableView 的,光是看只有几百行源码,就感觉又是个半成品。此外,还附带提供了一个 TreeViewDelegate 默认的 delegate 实现。TreeView 文档:https://doc.qt.io/qt-6/qml-qtquick-treeview.htmlTreeView 继承自 TableVie
2022-04-24 01:36:43
2976
原创 Qt6 QML 日历样式自定义
Qt6 把 Qt5 labs 中的日历组件放到了 Controls2 里,和 Qt5 Controls1 中的 Calendar 组件不同,新的日历由三个部件组成:MonthGrid 展示月内日期、DayOfWeekRow 展示星期几、WeekNumberColumn 展示第几周。因为文档示例过于简单,所以还需要借鉴源码中的默认实现。MonthGrid 日期表格,主要是定义 delegate 单元格样式,文档提供了 delegate 中可以访问的 model role:(model.day 表示日期,m
2022-04-16 14:37:57
1736
6
原创 QML Shapes模块中渐变的使用简例
才发现 Qt 文档中 Shapes 模块的三种渐变没有参考代码,只在官方示例里有。其中的 LinearGradient 的使用还有点区别,得指定起止点位置才有渐变效果,我想是因为 ShapePath 自身是没有宽高属性的,所以没有默认的起止点;并且其渐变方向也是根据起止点来确定的。效果和代码如下://Circle.qml 定义一个圆形的shape组件import QtQuick 2.12import QtQuick.Shapes 1.12//两个圆弧组成的圆Shape { i
2022-04-12 23:56:37
1074
原创 QML实现换肤(主题样式切换)
Qt Quick 没有像 QtWidgets 那样的 QSS 样式表机制,只能通过自定义组件或者设置 Controls 主题来实现样式定制。目前网上搜到的换肤功能,大多是定义一个全局的样式文件,在自定义组件中绑定全局样式属性,切换主题时更换全局属性的值。详情可参考 TaoQuick 中的换肤:Qml组件化编程3-动态切换皮肤 - 知乎//Skin.qml 单例pragma Singletonimport QtQuick 2.12QtObject { property string the
2022-04-10 17:34:17
2578
1
原创 OpenGL with QtWidgets:屏幕坐标转世界坐标
(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2022-04-04)0.前言在之前的图形绘制操作中,都是将模型顶点坐标转换为屏幕坐标进行显示。但在进行如人机交互时,可能需要将屏幕坐标转换到世界坐标,比如点击物体进行选中,如果采用射线拾取法,就需要将屏幕坐标系的点转到世界坐标系去。1.知识点先复习下顶.
2022-04-04 23:50:06
1973
11
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关注的人