自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龚建波

一切都是稍纵即逝的追寻

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

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

原创 QML Image 通过 QQuickImageProvider 加载图片

QML 中使用 Image 来加载图片,有三种加载方式:从 Qt 资源系统加载;文件加载;由 ImageProvider 提供数据。通过 ImageProvider,我们可以将内存中的图像由 QML Image 呈现。当然,如果单纯是想渲染内存中的图像数据,也可以直接用 QQuickItem 或者 QQuickPaintedItem 等。

2022-12-25 23:26:24 3030

转载 24种 JavaScript 循环遍历方法

今天我们来看点基础知识,看看JavaScript中的那些循环遍历方法

2022-12-25 21:57:27 7941

原创 Qt实现程序重启功能

主要逻辑就是退出当前进程,QProcess::startDetached 开启新的进程

2022-11-30 23:11:26 3414

原创 《QDebug 2022年11月》

当使用 QApplication 而不是 QGuiApplication 时,MessageDialog 的accepted、rejected 信号会触发两次,一种替代方案是使用Qt.labs.platform 模块的 MessageDialog。

2022-11-30 22:40:35 1389

原创 QML实现图片拖入拖出、剪贴板复制粘贴

QML 中提供了DropArea 类型来处理拖放,使用containsDrag 属性判断是否有拖拽动作,使用 dropped(DragEvent drop) 信号处理拖拽的释放动作,此信号带一个DragEvent 参数,可以从中获取拖放的内容。如果拖放的是文件,可以通过DragEvent 的 urls 属性取文件路径列表,再将路径设置给 Image source。

2022-11-26 23:42:17 3064 2

原创 Qt5 QML TreeView currentIndex当前选中项的一些问题

Qt5 QML Controls1.4中的 TreeView 存在诸多问题,比如节点连接的虚线不好实现,currentIndex 的设置和 changed 信号的触发等。我想主要的原因在于 TreeView 是派生自 BasicTableView,而 TableView 内部又是由 ListView 实现的。

2022-11-21 00:59:22 3795

原创 《QDebug 2022年10月》

​CMake和qmake判断Qt版本,可以通过和QT_VERSION 等版本号变量比较来判断:1.1 CMake:(VERSION_LESS/EQUAL/GREATER三种比较) :if(QT_VERSION VERSION_LESS 5.15.0) message("< Qt5.15")else() message(">= Qt5.15")endif()​

2022-10-31 23:30:22 1179

原创 《QDebug 2022年9月》

3.Visual Studio 使用 editorconfig 设置创建的文件编码为 utf-8VS 里创建的文件一般是根据 locale 来确定编码的,比如中文环境一般是 gb2312。VS 本身可以单个修改文件编码为 utf8,或者使用插件。目前版本的 VS 还支持editorconfig 配置文件,相比插件更加灵活,且支持很多 IDE(Qt Creator 这个垃圾貌似还不支持,但是可以装对应的开源插件)。

2022-09-27 12:58:21 1272

原创 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 2191 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 2020

原创 离职总结(2022-9-5)

2022年9月2日,是在这家公司的最后一天,从2020年11月2日入职算起,也不到两年的时间。离职前加班加点的赶工了一个月把最后一个版本完成了(周末在赶,晚上一两点还在赶那种),本来这个版本可以不做早点走人的,但是之前的代码确实写的不好(有我自身水平低的原因,也有多人交叉修改代码的原因),所以重构了一些代码,这样别人改起来也方便一点。离职之后打算先休息一段时间再找工作,期间进行一些总结和学习,反正单身狗也没有房贷和婚姻的压力。

2022-09-05 16:07:28 4538 15

原创 《QDebug 2022年8月》

对于一些透明或者半透明的QWidget,可能需要点击其下方的按钮或其他组件,但是QWidget本身是会接收这些鼠标事件的,需要一些额外的处理。下面是百度到的一些方法:方式A.设置setAttribute(Qt::WA_TransparentForMouseEvents, true),设置之后该QWidget对象树就不再处理鼠标事件。最大的缺点就是不仅该QWidget不响应鼠标事件,它上面的其他组件也没法响应鼠标事件了。...

2022-08-31 22:43:38 704 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 7923 9

原创 《QDebug 2022年7月》

在数组的开头有一个逗号,或者中间两个连续的逗号,都会多出一个undefined的元素(除了尾部多一个逗号没啥影响),一不小心多写或者少删了一个逗号都可能导致逻辑错误,因为这种定义目前是不会报警告的。...

2022-07-31 22:44:36 444

原创 Qt程序设计:多个View共享数据

当多个 View 展示同一个数据集中的部分数据项时,其中一个 View 进行了增删改操作,也需要同步到其他的 View。有两种比较简单的解决方案:方案一:共用一个 Model 实例,通过 Proxy 来辅助完成过滤和选择等操作。方案二:多个Model 持有同一组数据项指针(建议用智能指针),更新之后通知所有关联的 View 进行同步刷新。...............

2022-07-11 00:10:05 2064 3

原创 Qt音频相关类升级到Qt6之后的一些变化

Qt6 重构了多媒体模块,一些接口也随之变动,本文记录用到的部分音频相关类的变化。(PS:Qt6.2 该模块才回归,模块名未变,依旧是 multimedia)

2022-07-07 00:33:14 3069 1

原创 《QDebug 2022年6月》

环境:Window10 MSVC2019 Qt5.15.2-64bit(更低的版本也会)现象:笔记本+扩展屏有两个屏幕,Windows 设置的主屏上可以正常显示 QML 的 Window 窗口,辅屏上则会在启动时卡死(一个黑色或者白色的窗口卡死在那里;默认操作焦点在哪个屏幕就会在哪个屏幕弹出窗口,所以程序拖到对应屏幕下启动即可)。禁用掉笔记本自带的集成显卡后,在主屏和辅屏都能正常启动了。

2022-06-22 00:34:28 803

原创 Qt Quick 3D学习:鼠标拾取物体

(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议)Qt Creator 中有一个 picking 的示例,用于演示 View3D 中物体的拾取:在示例基础上,我又加了一个简单的拖动效果

2022-06-11 23:24:00 1895

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

原创 Qt Quick 3D学习:模型加载

(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议)Qt Quick 3D 模块提供了 Model 类型用于 3D 模型加载,通过设置 source 的资源路径来加载对应的 3D 模型。

2022-06-04 18:14:02 3790 5

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

原创 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 2353 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 1212

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

原创 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 5765 10

原创 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 2808 8

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

原创 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 4436 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 3338 13

原创 Qt实现路径渐变,绘制彩色的线条

Qt本身是没有路径渐变的,只提供了三种基本的渐变类型:常见的解决方案是,对路径分段进行线性渐变填充,本文也是采用该方法,效果如下:主要用到 QPainterPath 的两个接口:length路径整体长度,和pointAtPercent根据百分比求路径上点坐标。pointAtPercent 是一个较为费时的函数,尽量不放在 paintEvent 中计算,避免卡顿。qreal QPainterPath::length() constQPointF QPainterPath::poi...

2022-03-27 04:04:45 3971 2

原创 《QDebug 2022年3月》

一、Qt Widgets 问题交流二、Qt Quick 问题交流1.Quick.Control1 中 Menu 通过 style 设置样式不生效在 Qt5 中设置 Control1 菜单组件的style 之后,有时会发现样式并没有生效:import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 1.4import QtQuick.Controls.Styles 1.4Window { wi.

2022-03-15 01:08:38 1069 2

转载 面试官的动机:memcpy 与 memmove

面试中经常考察 memcpy 和 memmove 的实现,百度一搜,有很多篇文章,但遗憾的是,很多都是有问题的,并且互相抄来抄去,一起出错。面试官通过考察memcpy的实现,可以考察应聘者对以下知识点的掌握:内存对齐的理解 内存存取粒度与效率的关系 内存重叠的问题(memory overlap)基本实现#include <stdio.h>void *memcpy(void *dst, void const *src, size_t size){ assert((d

2022-03-14 19:13:13 628

转载 面试题之 strcpy/strlen/strcat/strcmp 的实现

一、字符串拷贝strcpy函数strcpy的原型是char* strcpy(char* des , const char* src),des 和 src 所指内存区域不可以重叠且 des 必须有足够的空间来容纳 src 的字符串。#include <assert.h>#include <stdio.h>char* strcpy(char* des, const char* src){ assert((des!=NULL) && (src!=N...

2022-03-14 19:06:41 416

原创 QML自定义环形菜单/环形选择框

Qt5 中本身提供了扇形菜单 PieMenu,属于 QtQuick.Extras 模块,这个模块是拓展自 QtQuick.Control1 的,QtQuick.Control1 在 Qt5 高版本被废弃,并在 Qt6 移除。不过我们也可以用 QtQuick.Control2 的组件自定义样式来实现环形或扇形的菜单和选择框。主要思路就是使用 PathView 来替换默认的 ListView,再改下弹框的背景样式。ItemDelegate 需要设置给 ComboBox 或者 Menu,而不是 Vie

2022-03-13 21:03:20 2460

原创 OpenGL with QtWidgets:帧缓冲/离屏渲染

(本文是LearnOpenGL的学习笔记,教程中文翻译地址https://learnopengl-cn.github.io/(备用地址https://learnopengl-cn.readthedocs.io/zh/latest/),写于 2022-03-06)0.前言(摘抄自 LearnOpenGL 教程中文版)到目前为止,我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebu.

2022-03-06 01:26:56 2867

原创 OpenGL with QtWidgets:练习之甜甜圈

甜甜圈是 《OpenGL 超级宝典》上的一个示例,用来演示面剔除和深度测试应用,原本的代码顶点和着色器部分不便于学习,我就重新写了下,略去了法线和光照相关。当我们对渲染出来的甜甜圈进行旋转的时候,会出现一些不符合预期的渲染效果,一些原本应该被遮挡的部分被渲染了出来。如果只是简单的不渲染被遮挡的背面,可以使用面剔除。因为渲染的面减少了,这也提高了性能。如果确定正面还是背面呢?OpenGL 是通过三角顶点的绕序来决定的,从观察者角度看,默认逆时针的顶点连接顺序被定义为三角形的正面,同时面剔除默认是剔

2022-02-22 23:58:10 3640 3

原创 QML实现异形按钮(不规则点击区域)

前言在一个带圆角的 Rectangle 上放置一个 MouseArea,当点击圆角外区域时,依旧能触发点击事件。用 OpacityMask 遮罩裁出来的图形也一样。Rectangle { width: 100 height: width radius: width / 2 color: "green" MouseArea { anchors.fill: parent onClicked: console.log('click'

2022-02-18 16:12:07 3798 1

原创 Qt示例学习:Cube OpenGL ES 2.0

0.前言该示例展示了如何在 Qt 中使用 OpenGL ES 2.0 编写可鼠标操作旋转的 3D 立方体。示例整体比较简单,只需要一点点 OpenGL 基础。主要有两个点可作为学习参考,一是 Qt 封装的 OpenGL 便捷类(顶点缓冲,着色器程序等)的基本使用,二是四元数类 QQuaternion 的基本使用。在 Qt Creator 搜索 cube,或者源码示例中查找Qt 安装后示例路径:D:\QtOnline\Examples\Qt-5.15.2\opengl\cubeQt 源码路

2022-02-15 17:08:05 3262

原创 QML Canvas 绘制进度条(环形和波浪水球)

QMLCanvas绘制进度条(环形和波浪水球)

2022-02-10 22:54:58 3302 1

TestGPRC.rar

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

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