自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

龚建波

一切都是稍纵即逝的追寻

  • 博客(216)
  • 资源 (4)
  • 收藏
  • 关注

原创 spdlog 日志库学习,自定义 sink

spdlog wiki:https://github.com/gabime/spdlog/wiki别人的学习笔记:https://github.com/gabime/spdlog/wikispdlog 有daily_file_sink 每日创建一个 和rotating_file_sink 根据大小翻滚,但是每个 sink 是独立处理的,没法根据时间和文件大小来同时作为生成条件,只好继承 base_sink 自定义。首先是文件名的拼接,参照daily_file_sink 源码: ...

2021-01-19 00:13:38 27

原创 QML 自定义 Loading 样式

QML 自带的 BusyIndicator 自定义效果不大理响,所以自己做了两个。效果如下:代码链接:https://github.com/gongjianbo/QmlComponentStyle实现代码:import QtQuick 2.12import QtQuick.Controls 2.12//自定义 loading 效果//龚建波 2021-1-17Item { id: control //item圆圈个数 property int itemC

2021-01-17 15:58:13 17

原创 Qt 实现类似 Python turtle 海龟绘图的动画效果

1966年,SeymourPapert 和 WallyFeurzig 发明了一种专门给儿童学习编程的语言——LOGO 语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。海龟绘图(TurtleGraphics)后来被移植到各种高级语言中,Python内置了 turtle 库,基本上完整复制了原始 TurtleGraphics 的所有功能。海龟绘图的特点就是以动画的形式绘制出图案,这比直接展示最终图案更有趣。要在 Qt 中实现这种动画效果,我的思路就是通过定时器刷新当前进度,...

2021-01-02 18:54:32 80 1

原创 QML 实现日期范围选择框

日期范围选择只需要组合几个组件就行了,着实很简单,这里只是水一篇。有两个要注意的地方,弹框的 closePolicy 可以设置为 Popup.CloseOnPressOutsideParent|Popup.CloseOnReleaseOutsideParent|Popup.CloseOnEscape,这样点击弹框关联的编辑框的时候弹框也消失了;另一点就是 js Date 对象是个引用类型,所以每次使用我都 new 一个,避免重复使用被影响。实现效果:(日历弹框暂时用的 Control1 的日历...

2020-12-27 16:59:05 80

原创 QML 实现一个简易的分页组件

当列表数据项较多的时候,会有分页展示的需求,可能需要展示数据总数、每页显示数、总页数、当前页数等。因为数据可能是通过网络分页请求得到,或者本地数据会刷新,那么这些信息就得通过外部设置,组件只负责请求和展示页码信息就行了。点击某一页之后先预设置为该页按钮高亮,待数据返回后根据参数重新设置。主要难点就在页码按钮数值的计算、显示隐藏上了,剩下的样式就根据需求调整。效果展示:主要实现代码:(github链接:https://github.com/gongjianbo/MyTestCode/t

2020-12-27 16:44:30 81

原创 QML 实现一个简易的音频录制组件

0.前言Qt 的multimedia 多媒体模块提供了一些基本的音视频接口,虽然不带编解码器,不过对于录音来说,能处理 PCM 数据就够了。实现中,使用 QAudioDeviceInfo 获取输入输出设备信息,使用 QAudioInput 获取音频输入数据,使用QAudioOutput 播放音频数据。最终效果如下:1.实现过程需求如下:录制音频 播放录制的音频 保存和加载录制的音频文件 波形绘制1.1录制对于录制,可以使用QAudioInput 类,在 Qt...

2020-12-16 00:21:31 73

原创 《QDebug 2020年12月》

一、Qt Widgets 问题交流1.二、Qt Quick 问题交流1.布局嵌套时出现循环绑定提示多个布局嵌套使用时,如果绑定了 parent 布局的宽高为 item 的 preferred 宽高,就会出现循环绑定的提示。可以把尺寸绑定到外层的组件消除该提示。错误示例:import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Layouts 1.12Window { visible: true

2020-12-07 11:45:54 89

原创 SILK SDK + Qt 将QQ/微信的 silk/amr 音频转为 wav 格式

参考示例:SILK_SDK_SRC_v1.0.9\SILK_SDK_SRC_ARM_v1.0.9\test\Decoder.c参考博客(转载):Android 多媒体之 Silk 格式音频解码_weixin_34292924的博客-CSDN博客别人做的decoder:kn007/silk-v3-decoder: [Skype Silk Codec SDK]Decode silk v3 audio files (like wechat amr, aud files, qq slk files) and

2020-11-29 20:31:51 128

原创 FFmpeg + Qt 音频文件转PCM数据

参考示例:ffmpeg-4.2.4\doc\examples\resampling_audio.c参考博客: FFmpeg音频重采样API(libswresample) - 简书 (jianshu.com)本文代码链接(不带FFmpeg库):MyTestCode/Qt/GetAudioInfo at master · gongjianbo/MyTestCode (github.com)本文通过重采样的方式,将音频文件中的数据转为指定参数格式的 PCM 数据。FFmpeg 中重采样的功能由 lib

2020-11-25 12:23:31 110

原创 使用 FFmpeg 获取音频文件编码格式、采样率等信息

参考博客:https://blog.csdn.net/zhoubotong2012/article/details/79340722参考博客:https://blog.csdn.net/luotuo44/article/details/54981809我是在 Qt 里跑的,所以路径用了 QString 传递,然后 FFmpeg 使用的 4.2 版本进行测试。对于相关函数的含义,一般 FFmpeg 源文件有注释。extern "C" {#include <libavformat/avfo

2020-11-20 01:31:31 337

原创 使用JavaScript动态创建QML对象

0.前言在一些 QML 代码中,可以看到 createComponent 或者createObject 这样的函数被调用,这就是动态创建 QML 对象的接口。QML 支持从 JavaScript 内部动态创建对象,这对于延迟对象的实例化很有用,缩短了应用程序的启动时间。它还允许根据用户输入或其他事件动态创建可视对象并将其添加到场景中。本文主要参考自官方文档:参考文档:https://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.h.

2020-11-19 09:56:42 113

原创 QML ListView 鼠标拖拽交换行

QML 的 ListView 本身有 move 过渡(Transition)属性,可以用来做一些交换动画效果。其中 move 为当前项的过渡,moveDisplaced 为被交换项的过渡。鼠标拖拽可以用一个 MouseArea 来实现,当鼠标滑动到相邻行后就调用 model 的 move 接口,这样就会触发 view 的 move 过渡动画。效果如下:感觉有点生硬,勉强能用。完整代码如下:import QtQuick 2.12import QtQuick.Window 2.12//演

2020-11-16 01:26:53 148 2

原创 QML 自定义窗口简易实现:使用过滤 Window 事件的方式

1.前言QML 自定义窗口目前看到的主要有两种方式,一种是纯 QML 实现,使用 MouseArea 来处理鼠标相关事件;另一种是事件过滤,用系统本地 API 进行操作。前两天看了涛哥的自定义窗口(https://github.com/jaredtao/TaoQuick),是继承 QQuickWindow + 本地 API 的方式实现的。我本来也想借鉴下,但是发现 QML 的 Window 在 Qt5 后面的版本改为了 QQuickWindow 的子类QQuickWindowQmlImpl ,还是个没.

2020-11-15 20:40:10 107

原创 QML 使用 Window 自定义简易对话框

1.需求对话框大小适应内容区域文本,也不排除会放入其他组件;按钮区域肯定需要一定的自定义,比如显示隐藏哪些按钮。2.实现大小的适应,我让根组件的高度绑定内容的高度来适应;内容区域的组件切换,我放了一个Loader{}进行动态加载,且初始为一个Text显示文本信息;按钮区域我只放了一个Row{}排列按钮组,通过枚举来控制显示隐藏,暂时没扩展按钮的接口,全都是预先定义好的;此外还做了按钮焦点切换,弹出居.

2020-11-10 00:35:49 122

原创 《QDebug 2020年11月》

一、Qt Widgets 问题交流1.二、Qt Quick 问题交流1.Control1的TreeView右键选中某一项TreeView本身的currentIndex属性是只读的,只能通过selection(ItemSelectionModel)提供的接口去操作: TreeView { id: view MouseArea{ id: mouse_area anchors.fill: parent

2020-11-04 00:24:42 68

原创 Vue.js学习笔记:v-show与v-if区别

区别相同点:v-if 与 v-show 都可以动态控制显示隐藏效果;不同点:v-if 是动态的向 DOM 树内添加或者删除 DOM 元素来实现显示隐藏,v-show 是通过设置 DOM 元素的 display 样式属性。要注意的是,如果 css 中设置了元素的 display 样式属性,效果会有冲突。根据官方文档描述:v-if 是 “真正” 的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。 v-if 也是惰性的:如果在初始渲染时条件为...

2020-10-22 21:38:35 64

原创 《QDebug 2020年10月》

一、Qt Widgets 问题交流1.QDateTime/QDate/QTime在QtConcurrent/std::thread用toString()/currentTime()等接口报错版本:Qt5.15.1 MSVC 32/64-bit代码如下: QtConcurrent::run([=]{ QTime time; time.setHMS(1,2,4); qDebug()<<time.t

2020-10-07 15:50:35 100

原创 QML中AJAX的基本使用

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)

2020-10-05 02:14:22 137 2

原创 QML WebEngine + ECharts展示实时曲线

(相信不少人都会用 ECharts 这个网页图表库,我这里也只是学 WebEngine 顺带做个笔记)我的环境:Qt5.15.1 MSVC 32bit,不同的版本可能 webengine 的初始化有所不同,以官方文档为准。本文完整项目链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qml/QmlWebEngineECharts0.下载ECharts下载地址:https://echarts.apache.org/zh/downlo

2020-09-24 23:25:38 267

原创 QStyledItemDelegate基本使用:单元格数据渲染与编辑

前言QStyledItemDelegate 继承自 QAbstractItemDelegate,主要用于为 Model-View 中的数据项提供显示和编辑功能。QAbstractItemDelegate 有两个字类,QStyledItemDelegate 和 QItemDelegate,根据文档描述QStyledItemDelegate 使用当前样式来绘制,不过默认实现的显示效果基本差不多,具体设计上的差异暂略。之所以用QStyledItemDelegate ,是根据文档的建议,在实现自定义 del..

2020-09-20 01:55:59 382

原创 QAbstractTableModel基本使用:排序相关接口

前言QAbstractTableModel 继承自QAbstractItemModel,主要用于为 QTableView 提供相关接口,我们可以子类化该抽象类并实现相关接口。本文主要讲QAbstractTableModel 提供的 sort 接口的相关细节。(请确保自己已经熟悉了 rowCount、columnCount、data 等基础的接口)使用 QTableView 的排序功能QTableView 有个setSortingEnabled 接口,设置为 true 后,我们就可以通过...

2020-09-19 00:35:54 270

原创 QAbstractTableModel基本使用:表头相关接口

前言QAbstractTableModel 继承自QAbstractItemModel,主要用于为 QTableView 提供相关接口,我们可以子类化该抽象类并实现相关接口。本文主要讲QAbstractTableModel 为 QHeaderView 表头提供的接口如何使用。(请确保自己已经熟悉了 rowCount、columnCount、data 等基础的接口)表头相关接口的使用一个完整的 QTableView 还包含了行列两个 QHeaderView 表头,表头的 model 可以独..

2020-09-17 23:59:32 676

原创 QAbstractTableModel基本使用:数据加载以及增删行列

前言QAbstractTableModel 继承自QAbstractItemModel,主要用于为 QTableView 提供相关接口,我们可以子类化该抽象类并实现相关接口。本文主要讲QAbstractTableModel 数据的加载与更新,以及行列的增删。(请确保自己已经熟悉了 rowCount、columnCount、data 等基础的接口)加载数据并刷新当我们想重置 model 的数据时,可以将重置的逻辑放在beginResetModel 和endResetModel 两个函数...

2020-09-17 01:25:01 578

原创 整理的Qt相关博客及开源项目的链接(2020-10-2)

(因为我是保存在记事本,所以需要复制出来粘贴到浏览器地址栏去访问,后期更新了我会在标题栏修改日期)Qt5官方在线文档:https://doc.qt.io/qt-5/Qt官方下载链接:http://download.qt.io/archive/qt/Qt官方下载链接:http://download.qt.io/new_archive/qt/Qt君整理的下载地址:http://qthub.com/download/Qt镜像列表:http://download.qt.io/static/mirrorl

2020-09-16 15:54:56 351

原创 QAbstractTableModel基本使用:数据展示与编辑

前言QAbstractTableModel 继承自QAbstractItemModel,主要用于为 QTableView 提供相关接口,我们可以子类化该抽象类并实现相关接口。本来主要讲下QAbstractTableModel 数据展示和编辑相关的接口如何使用。表格数据的展示继承QAbstractTableModel 后,至少要实现三个纯虚函数接口才能进行实例化:virtual int rowCount(const QModelIndex &parent = QModelInd...

2020-09-16 00:56:46 690

原创 离职后的工作总结(2020-9-15)

2020年9月4日,我又离职了,工作才三个多月。算上这家,我已经待了三家公司了,但是离职原因都是相似的:觉得技术上没有提升以及想要更高的工资。这家公司也不例外,根据工作安排,我可能很长一段时间都要进行将MFC代码移植到Qt的工作,这无异是非常枯燥的事,于是我提出了辞职。也想过工作时间太短对下一次求职有影响,但我更不喜欢混日子,也许我脑子想问题就是这么简单。虽然这份工作没做多久,但是也发现不少问题,才想要总结一下。1.没有完全理解需求就开始写代码我这个习惯很不好,有些需求比较复杂,但我可能只理解了

2020-09-15 13:19:26 435 5

原创 QTabWidget自定义,拖入拖出Tab页的简易实现

0.实现效果(声明:这只是个测试,不是很满意,放着也没用就分享下)实现效果GIF:完整代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/MyTabWidget相关参考:https://www.cnblogs.com/findumars/p/5175984.html相关参考:https://github.com/MRXY001/Qt-DragableTabWidget1.实现过程QTabWidget的Tab

2020-09-09 21:33:40 522 8

原创 OpenCV3学习笔记(8):基本绘图

参考文档:https://docs.opencv.org/3.4.11/d6/d6e/group__imgproc__draw.html参考教程:https://www.w3cschool.cn/opencv/opencv-fpo82ccc.html0.准备工作Point 表示一个2D坐标点Point pt;pt.x = 10;pt.y = 8;Point pt=Point(10,8);Rect 表示一个矩形区域Rect rect=Rect(0,0,100,100); /

2020-09-08 15:59:12 78

原创 OpenCV3学习笔记(7):图像混合,addWeighted()

0.图像混合通过addWeighted函数,可以将两张大小和通道相同的图片按照一定比例混合到一起,所有的比例之和为1。void cv::addWeighted( InputArray src1, //图片1 double alpha, //混合比例 InputArray src2, //图片2,其大小和通道与1相同 double beta, //混合比例 double gamma, //偏差,每次计算加上该值 OutputArray dst, //输出图

2020-09-08 00:28:16 68

原创 OpenCV3学习笔记(6):图像卷积操作,filter2D()

0.数字图像处理中卷积数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。这张图可以清晰的表征出整个卷积过程中一次相乘后相加的结果:该图片选用3*3的卷积核,卷积核内共有九个数值,所以图片右上角公式中一共有九行,而每一行都是图像像素值与卷积核上数值相乘,最终结果-8代替了原图像中对应位置处的1。这样沿着图片一步长

2020-09-06 16:13:18 199

原创 诛仙3网游:乾坤珠的获取与使用

参考官网介绍:http://cs.wanmei.com/getSearchDetail?id=20742参考玩家介绍:http://bbs.wanmei.com/forum.php?mod=viewthread&tid=249326飞升150后,可以通过乾坤珠道具相关的任务快速升到飞升160。当区里前200名飞升155+之后,飞升150+的角色可以接到大荒浩浩苍穹变的任务,奖励是100个乾坤珠。一个珠子做完任务大概百分之9的经验,然后所有任务加起来一天大概最多消耗10个,这样半个月就160了

2020-09-06 14:07:18 1004

原创 测试 std::mutex && CRITICAL_SECTION && QMutex 三者的效率

std::mutex 标准库的互斥锁;CRITICAL_SECTION Windows提供的临界区;QMutex Qt提供的互斥锁封装,显然,Qt封装的效率一般不如前两者。参照这篇文章:https://www.iteye.com/blog/aigo-1908084和他的结论差不多:在旧版本编译器上(如VS2013),std::mutex 比临界区更慢;在新版本编译器上(如VS2015/2017),std::mutex 的效率显著提高,特别在竞争情况下比临界区快多了。下面是 VS2013 和 VS

2020-09-01 15:23:52 135

原创 《QDebug 2020年9月》

一、Qt Widgets 问题交流1.QTabWidget使用setTabBar设置的标签栏,样式表有问题自定义Tab的时候,如果继承QTabWidget,使用setTabBar设置标签栏: //setTabBar是protected成员函数,要使用就得继承 setTabBar(new QTabBar(this));那么样式表给QTabBar设置透明(或半透明)就会出现1px的灰色条横线:如果设置为不透明背景或者边框设置不透明就没问题:QTabBar::t.

2020-09-01 08:39:17 74

原创 OpenCV3学习笔记(5):阈值化操作,threshold()和adaptiveThreshold()

(注:本文使用OpenCV3进行学习)0.前言阈值化操作在图像处理中是一种常用的算法,比如图像的二值化就是一种最常见的一种阈值化操作。OpenCV中提供了直接阈值化操作cv::threshold()和自适应阈值化操作cv::adaptiveThreshold()两种接口,本文学习下基本的使用。主要参照:https://blog.csdn.net/guduruyu/article/details/68059450参照博客:https://docs.opencv.org/master/d7/d1

2020-08-31 00:05:23 166

原创 QML实现程序退出确认功能

关闭程序时弹一个确认提示框是很常见的功能,下面是本文 Demo 运行效果:在 QML 中,有三种常见的关闭应用的方式:import QtQuick 2.9import QtQuick.Window 2.9import QtQuick.Controls 2.9Window { id: root visible: true width: 640 height: 480 title: qsTr("GongJianBo 1992") Colu.

2020-08-27 23:38:35 326

原创 Qt自定义点击表头排序,使支持恢复默认顺序

0.前言之前总结了 QTableView 实现排序,但是这里还有个问题,就是 Qt 默认的排序状态只有升序和降序,没法通过点击表头恢复到默认的顺序,他这个 SortOrder 宏也只有升序降序两个枚举值(有点奇怪,Qt 很多枚举都有 None 之类的): enum SortOrder { AscendingOrder, DescendingOrder };没办法,要实现恢复默认顺序 ,只能自定义一个QHeaderView ,最终效果如下:..

2020-08-26 23:24:51 177

原创 OpenCV3学习笔记(4):初识ROI

ROI(region of interest),直译感兴趣区域,即图像需要操作的的部分区域。1.一个矩形区域最简单的是从一个Mat得到一个矩形区域,然后进行操作。先创建一个白色的400*400图像:Mat image = Mat(400, 400, CV_8UC3, Scalar(255, 255, 255));取左上角200*200区域,可以用重载的 () 操作符,或者构造函数等://Mat重载了()操作符:Mat cv::Mat::operator() (const Rect

2020-08-24 23:12:16 75

原创 OpenCV3学习笔记(3):认识Mat类及其创建

1.认识Mat类早期的OpenCV中,图像的处理是通过IplImage的C语言结构。从OpenCV2.0开始用C++重新实现,引入Mat类使用引用计数的方式管理内存。Mat类由两部分组成:矩阵头(包含矩阵的大小,存储类型,存储地址等信息),以及一个包含像素值的内存块。矩阵头大小是恒定的,矩阵数据本身的大小可以随着图像的不同而变化。Mat类使用引用计数系统,每个Mat对象都有自己的头,但是可以指向同一个内存地址,使矩阵数据可以在两个Mat实例之间共享(参照智能指针)。使用赋值操作符只会将头和数据指针复

2020-08-24 00:37:57 120

原创 Qt Creator配置FreeImage库

第零步:前言根据官网介绍:FreeImage 是一个开源库项目,面向希望支持当今多媒体应用程序所需的流行图形图像格式(如 PNG,BMP,JPEG,TIFF 和其他格式)的开发人员。FreeImage 易于使用,快速,多线程安全,与 Windows 的所有 32 位或 64 位版本兼容以及跨平台(适用于 Linux 和 Mac OS X)。凭借其 ANSI C 接口,FreeImage 可用于多种语言,包括 C,C ++,VB,C#,Delphi,Java 和常见的脚本语言,如 Perl,Py

2020-08-23 00:20:10 261

原创 OpenCV3学习笔记(2):图像的读取保存及颜色空间转换

学习 OpenCV 从显示第一张图片开始。cv::imread 读取图片;cv::imwrite 保存到文件;cv::imshow 显示到窗口;cv::cvtColor 色彩空间转换,如彩色转为灰度图。原图:效果图:#include <iostream>#include <opencv2/opencv.hpp>using namespace cv;int main(int argc, char** argv){ //【】读取 //

2020-08-18 23:21:31 166

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_VS2019x64.rar

FFmpeg+Qt 从音频文件取PCM数据,使用重采样的方式转换为指定格式,git链接(https://github.com/gongjianbo/MyTestCode/tree/master/Qt/GetAudioInfo)

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关注的人 TA的粉丝

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