
Qt 编程技术
文章平均质量分 58
介绍Qt编程技术,应用技巧,第三方库支持等。
liyuanbhu
这个作者很懒,什么都没留下…
展开
-
Qt Creator 中使用 vcpkg
我的电脑是 win 11,装的编译器是 Visual Stdio 2022。Qt Creator 版本是 15.0.0。Qt 版本是 6.8.1。因此下面的描述都是在这个环境下测试的。我们以 gsl 库为例,测试程序很简单,下面是代码。整个程序的作用就是 计算 bessel 函数在 0.5 处的函数值。计算这个值只不过是为了确保使用到 gsl 这个库。main.cpp上面的代码很简单,但是如果 Qt Creator 不做任何设置的话会直接报错。报错的内容就是找不到 GSL 这个库。原创 2025-02-01 23:03:16 · 1227 阅读 · 0 评论 -
Qt QImage 加载 BMP 图像的一个BUG
所以在 Qt里,如果你用 QImage 打开 BMP图像,像素数要小于 16384 * 16384。这个可以说是个 Bug ,也可以说是 QImage 的Feature吧。确实是 quint64(bi.biWidth) * qAbs(bi.biHeight) > 16384 * 16384 时直接返回 false。这个问题源于水木社区的一个帖子:https://www.mysmth.net/nForum/#!经过测试 QImage 加载像素数大于 16384*16384 的图像会失败。原创 2022-11-20 09:13:46 · 1189 阅读 · 0 评论 -
Qt 中 QChart 由于 addSeries 和attachAxis 顺序问题导致无法显示曲线
介绍 QChart 使用中的一个注意事项。避免无法显示曲线。原创 2022-10-31 19:42:11 · 4046 阅读 · 3 评论 -
漫水填充算法填充图案 (C++)
从 stack 中取出一个点,把这个点填上颜色,然后判断邻近点有没有也是满足填充条件的点,有的话也填充上,并且存入 stack。另外被填充的图案中可有有些区域的颜色与我们要填充的区域的颜色一致。解决这个死循环问题我的办法是复制一份原始图像,在复制的图像中填充单色,在目标图像中填充图案。因为复制的图像填充的颜色和原始的颜色不同,所以就不会有死循环问题。下面是填充固定颜色的代码。在我的电脑上,填充速度也还可以,大概30-40ms 可以完成全部的填充计算。最后是填充后的效果,将原始图像红色的区域全都填充上头像。原创 2022-10-01 07:32:45 · 1282 阅读 · 0 评论 -
Qt 编写的程序如何只能运行一个实例
最近有个小项目,客户要求程序只能运行一个实例。以前没遇到过这种要求,这次特意花了点时间研究了一下。大概想了一下,有两种思路。一种是直接去找这个程序已经运行的线索。另一种思路是在程序中创造一种条件,这个条件可以被其他的实例感知。...原创 2022-08-27 22:14:39 · 2665 阅读 · 1 评论 -
利用libdmtx 生成 DataMatrix 码
今天比较空闲,研究了 Libdmtx 生成 DM 码的方法。总体是比较简单的。这里附上代码做个记录。我的代码用到了 Qt 的 QPainter,没有考虑生成图片的效率问题。如果需要大批量生成 DM 码的图像,可以在 dmtxEncodeDataMatrix 调用之前设置 Libdmtx 的一些参数。这样可以做到dmtxEncodeDataMatrix 生成的数据就已经是图片的实际数据了,只要把数据copy到图像文件中就可以。我的代码是把相关的功能封装到了一个类。类的实现代码如下:这个代码还有很多不完原创 2022-06-18 23:01:37 · 1571 阅读 · 2 评论 -
Qt 程序中获取 CPUID UUID 等系统信息的方法(win 平台,wmic)
Qt 程序中获取 CPUID UUID 等系统信息的方法(win 平台,wmic)最近的程序中要加入序列号注册的功能。这就需要获得电脑的一些基本信息,比如 UUID 、或者 CPUID 一类的固定的信息。五一假期简单研究了一下,有了个初步的方案。利用windows 自带的 wmic 命令来获取这些信息。 首先说明,这种方法有个很大的缺点,就是慢,很慢。随便获得什么信息都要零点几秒的时间。另外这个方法不能跨平台,只对 win 平台适用。所以这种方法只是临时应应急,以后还要再研究研究更好的方法。下面是代原创 2022-05-03 08:22:00 · 3565 阅读 · 0 评论 -
解决 Fedora Linux 35 下 Qt 程序 qDebug() 无输出问题
解决 Fedora Linux 35 下 Qt 程序 qDebug() 无输出问题最近电脑硬盘升级,富裕了不少空间。就装了个 Fedora linux。说起来我也算是个 linux 的老用户了,最开始用还是 redhat 9.0 。之后基本上就只用 Fedora linux。我记得用的第一个版本是 Fedora Core 3,后来一直用到 Fedora 23。中间还用过几个国产的 linux 发行版,比如 magiclinux。也用过 ubantu 和 debian 。前几年因为工作太忙,就没有在用 l原创 2022-01-01 13:56:38 · 1167 阅读 · 0 评论 -
基于 FFMPEG 的视频编码 源码(libavcodec,C++ Qt)
基于 FFMPEG 的视频编码 源码(libavcodec,C++ Qt)昨晚把源代码好好整理了一下,加入了视频时间限制功能。源码放这里,大家随便用。首先是头文件:/****************************************************************************** file: VideoRecorder.h** brief: 利用 ffmpeg 实现视频录制** Copyright (C) LiYuan** Author: LiYuan原创 2021-12-28 11:08:00 · 3468 阅读 · 1 评论 -
基于 FFMPEG 的视频编码(libavcodec ,致敬雷霄骅)
基于 FFMPEG 的视频编码(libavcodec ,致敬雷霄骅)本文参考了雷博士的博客:最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265))还参考了另一篇博客:Qt与FFmpeg联合开发指南(三)——编码(1):代码流程演示在为了代码简洁,代码中还用到了 Qt 。先不讲解具体的实现代码。大家先看看我封装后的类的使用方法。下面是一个简单的例子。这个例子先生成了一些 QImage 图像。然后把这些图像插入到视频中。#include <QCoreApplicat原创 2021-12-27 23:49:05 · 2899 阅读 · 0 评论 -
基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)
基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)前几天写了几篇关于ffmpeg 编程转封装的入门文章,下一步本来是要写转码或者编码的。但是发现无论是转码还是编码,都会遇到图像像素格式的变换。我们通常能在软件界面上显示的图像,都是 RGB 格式的(RGB24 或者 RGB32)。但是视频文件中的图像基本都是 YUV格式的(YUV420p 或者 YUV422p)。为了能继续我后面的软件开发,就需要先补充些 YUV 格式的知识。还有 YUV和 RGB 直接相互转换的方法。关于 YUV 和 RG原创 2021-12-09 20:32:19 · 4373 阅读 · 0 评论 -
基于FFMPEG的音视频截取(C++Qt 版)
基于FFMPEG的音视频截取(C++Qt 版)这篇博客是基于上篇博客的:https://blog.youkuaiyun.com/liyuanbhu/article/details/121744275上篇博客实现了文件封装转换。我们在这个基础上再加一点功能。实现可以任意截取一段时间范围内的音视频。下面是代码:QlyAVFormatContext inFile, outFile;inFile.openFile(QString("D:\\AV36_1.avi"));inFile.dumpFormat();QS原创 2021-12-07 06:30:00 · 2453 阅读 · 2 评论 -
最简单的基于FFMPEG的封装格式转换器(C++Qt 版)
最简单的基于FFMPEG的封装格式转换器(C++Qt 版)这篇博客是我上篇博客的延续。建议大家先看看我上篇博客:https://blog.youkuaiyun.com/liyuanbhu/article/details/121715005之所以写这篇博客,是因为 ffmpeg 的 API 并不是那么友好。用面向对象的方式重新组织一下,代码会易读很多。下面先贴改写后的代码,大家可以比较一下,是否清爽了很多。 QlyAVFormatContext inFile, outFile; inFile.ope原创 2021-12-06 12:26:11 · 1385 阅读 · 1 评论 -
Qt 中利用 GNU barcode 生成一维条形码
Qt 中利用 GNU barcode 生成一维条形码最近有个项目,需要用到条形码。上网找了一圈,网上很少有介绍如何用 C++ 或者 C代码生成条形码的。偶尔有那么一两篇,也是针对某一种条形码给出的。而且一般都是 Code 39 码或者 Code 128 码这种比较简单的条码。我调研了一番,感觉开源的条码库里面还是GNU barcode 实现的比较全。基本常见的条形码全都支持。不过 GNU barcode 直接在项目里用不是很方便。因为它封装的太简单了。缺少把条码画出来的功能代码。因此,我花了几天时间原创 2021-11-18 16:54:53 · 4078 阅读 · 3 评论 -
Qt 中如何隐藏 QMenu
Qt 中如何隐藏 QMenu我最近做的一个项目,需要根据 license 授权来控制软件的一些功能。有些菜单在某些状态下要隐藏起来。这么个简单的需求,折腾了半个多小时。最开始想的很简单,认为就是一句话就能解决。QMenu 继承自 QWidget,QWidget 的显示隐藏很简单。 ui->menu->hide();结果这么写了后毫无反应。后来研究了一下,需要这么写:ui->menu->menuAction()->setVisible(false);这里简单原创 2021-08-13 10:47:09 · 2596 阅读 · 0 评论 -
Qt QImage 与 OpenCV 的 Mat 类型的相互转化(改进)
Qt QImage 与 OpenCV 的 Mat 类型的相互转化(2)在我的以前的一篇博客中其实已经介绍过转化方法。https://blog.youkuaiyun.com/liyuanbhu/article/details/46662115但是那篇博客里的代码不够完善。主要是转化后的图像与转化前的图像是否共享内存数据比较的乱。有些情况是共享内存的,有些情况又没有共享内存。代码的说明里也没有交代清楚。给使...原创 2019-01-11 16:53:25 · 5649 阅读 · 5 评论 -
Qt(C++)项目中使用 Basler 工业相机(图像获取策略)
Qt(C++)项目中使用 Basler 工业相机(图像获取策略)Pylon 中的 CInstantCamera 类支持四种图像获取策略,分别称为:One by One Grab StrategyLatest Image Only Grab StrategyLatest Images StrategyUpcoming Image Grab Strategy下面就简单写写这几种策略的含义和区别原创 2017-07-11 20:31:21 · 9534 阅读 · 11 评论 -
Qt(C++)项目中使用 Basler 工业相机(2 参数设置)
Qt(C++)项目中使用 Basler 工业相机(2 参数设置)上一篇博客介绍了 pylon 的基本结构和如何枚举系统中的相机。这一篇主要讲讲如何设置相机的各个参数。在设置相机参数之前,先要获取相机对象。Pylon::CTlFactory 具有一个 CreateDevice() 方法可以用来生成一个相机对象,并返回一个指向 IPylonDevice 的指针。下面的代码用来获取枚举出来的第一个相机对应原创 2017-07-08 17:43:38 · 10570 阅读 · 0 评论 -
Qt(C++)项目中使用 Basler 工业相机(1)
Qt(C++)项目中使用 Basler 工业相机(1 枚举相机)最近的一个项目中用到Basler 的GigE 接口的工业相机。为此花了好几天时间研究了pylon 的用法。本文就是学习过程中做的笔记。Pylon 的结构可以参考下图。 图 1 Pylon 的结构 整个pylon 对 GenICam 接口进行了封装,但是这个封装并不是特别的彻底。只有理解了GenICam 的设计思想才能真正明白pylo原创 2017-07-06 22:14:43 · 11888 阅读 · 4 评论 -
游戏手柄(JoyStick)编程控制的一个简单代码(Qt)
最近买到一种USB 接口的三轴 8 个按键的Joystick。下面这个样子。 用在最近做的一个工控项目上效果还不错。这里把代码公开了。 Joystick 的控制我以前写过两篇博客: http://blog.youkuaiyun.com/liyuanbhu/article/details/51714045 http://blog.youkuaiyun.com/liyuanbhu/article/details/5原创 2017-03-25 13:53:59 · 27212 阅读 · 5 评论 -
Qt 中 qRound() 函数的使用时的一个小问题
Qt 中的 qRound() 函数是用来对浮点数四舍五入的。我最近在写的一个算法中用到了这个函数,发现了一个小问题。我的那个代码类似这样:double f; int i, j, k;j = i + qRound(f); k = j - qRound(-f);按照我最开始的想法,这里的 j 和k 应该是相同的。结果测试时发现对某些 f ,这两个值是不同的。仔细研究了一下,发现是这样的,四舍五入时原创 2017-03-11 12:40:42 · 9146 阅读 · 1 评论 -
用 Qt 的 QAudioOutput 类播放 WAV 音频文件
用 Qt 的 QAudioOutput 类播放 WAV 音频文件最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件。 如果只是播放 wav 文件,那么 Qt 里简单的 QSound 类是最适合的。但是 QSound 有一个很大的缺陷就是无法选择用哪个声卡。一番研究之后,决定用 QAudioOutput 来播放 WAV 音频文件。网上也能找到几篇相关原创 2016-11-17 23:15:58 · 16193 阅读 · 3 评论 -
OpenCV 学习 (Split 和 Merge)
OpenCV 学习 (Split 和 Merge)我们在图像处理时,经常要单独对某一个颜色通道进行处理。这时可以利用 Opencv 提供的 split 和 merge 函数。split 函数用于将一幅多通道的图像的各个通道分离。 这个函数的原型如下:void split(const Mat& src, vector<Mat_<_Tp> >& mv)用法很简单,src 是一幅多通道的图像。 mv原创 2015-10-20 14:44:19 · 19319 阅读 · 1 评论 -
漫水填充算法的一个简单实现(Qt版)
所谓漫水填充算法,是给定一个联通域内的一个点,以此为起点找到这个联通域的其余所有点并将其填充为指定颜色的一种算法。 之所以称之为漫水填充,是因为这种算法就是模拟了涨水的过程,从一点开始,水流慢慢加大,直到漫过了全部区域。 这个算法的详细介绍可以参考下面的链接。 https://en.wikipedia.org/wiki/Flood_fill这个算法在我们寻找一片指定区域时非常有用。因此,我就花原创 2015-08-08 13:03:15 · 7219 阅读 · 3 评论 -
Qt 的事件过滤器
有时候,我们需要限制某个控件的功能。这时我们可以派生出一个新的类,在这个新的类中对原有的功能进行限制。有些简单的情况,不需要如此大动作。利用Qt 提供的事件过滤功能也可以做到许多。所谓事件过滤就是提前截获发往某个对象的所有消息,根据需要屏蔽掉某一些,或者对某些消息提前进行些处理。比如许多浏览器都支持鼠标手势,这个其实就可以利用事件过滤器来实现。 这里用一个小例子来说明事件过滤器的用法。我们将事件过原创 2015-07-15 16:33:55 · 4958 阅读 · 1 评论 -
error: C2664: 不能将参数从“const char *”转换为“LPCWSTR” 的解决办法
开发环境:Qt 5.4.1 + VS2010在我的项目中用到了一个第三方的库。编译时报错:C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR” 解决办法,在报错的 C 文件的开头加上:#undef UNICODE原创 2015-07-10 20:01:39 · 7353 阅读 · 4 评论 -
C++ 生成随机字符串
C++ 生成随机字符串这个需求也是最近一个项目里的实际需求。测试一个数据库相关的代码。要往数据库里随机的填写一些字段。从原理上是很容易实现。建立一个数组,存放一些字符。然后随机的从里面取一些字符凑成一个字符串。所以这个代码没啥可说的。里面用到了 std::random_device,std::mt19937 ,std::uniform_int_distribution 可以作为 C++ 生成随机数的一个例子。还用到了初始化列表来初始化一个 QVector , 这个也可以作为一个例子。 #ifn原创 2020-12-27 10:12:03 · 8028 阅读 · 0 评论 -
Leptonica PIX 与 Qt QImage 的相互转换
最近有个项目需要用到 OCR 功能,研究了一下,感觉 Tesseract 还不错,准备在项目中试试。 但是发现 Tesseract 底层图像数据用到了 Leptonica。而我的程序准备用 Qt C++ 来写。这里就涉及一个问题,如何把 QImage 图像数据传递给 Tesseract。花了两天时间,写了两个 Leptonica PIX 与 Qt QImage 的相互转换函数。为了写这个代码,首先需要搞明白 PIX 都有哪些部分,如何构造。Leptonica 的文档不多,搞懂这些问题主要还是读源码。按照原创 2020-06-17 21:09:40 · 1524 阅读 · 0 评论 -
编译安装 QtMqtt 的几个问题及解决办法
编译安装 QtMqtt 的几个问题及解决办法最近一个项目中要用到 MQTT Client 的一些功能。Qt 的发行版还没有包含相关的模块。但是在下面这个 Qt 的官网上已经能找到相关的模块了:https://codereview.qt-project.org/#/admin/projects/qt/qtmqttgithub 上也能搜到不少相关的代码:https://github.com/qt/qtmqtthttps://github.com/toni1991/QtMqtthttps://gith原创 2020-06-07 09:19:58 · 11941 阅读 · 15 评论 -
QtChart 保存到图像文件
Qt 5.7 中引入了 QtChart 模块。利用 QtChart 模块可以很容易的在程序中画出各种漂亮的图表. 这些漂亮的图表除了在界面上显示之外, 还经常需要保存为图片,以便后续使用. 这篇博客就来讲讲如何将 Chart 保存到图片中.其实这是个小问题, 只需要两三行代码. 但是 QChartView 这个类没有提供这么个函数. 所以要实现这么个小功能还真要考验大家对 Qt 的掌握水平了. 我才原创 2017-11-05 21:52:23 · 11640 阅读 · 18 评论 -
一个用于 Qt 项目的简单的日志库
一个用于 Qt 项目的简单的日志库在写 Qt 程序时,经常会用到 qDebug 输出一些调试信息。但是正式发布时这些信息就看不到了,这时就很需要有个日志系统,可以把程序输出的一些关键性的信息记录下来。上网查找了一番,是有个开源项目叫 log4qt 的。不过这个项目许久都不更新了。看了看这个项目还挺复杂的,感觉用不到这么多功能。所以就自己山寨了个简单的日志库。Qt 中有个 qInstallMessag原创 2017-08-06 19:09:24 · 2311 阅读 · 2 评论 -
Qt 中的智能指针
Qt 中的智能指针上一篇博客中介绍了 C++11 标准中的提供的智能指针。在 Qt 中也提供了类似的替代功能,并且比 C++11 标准中提供的功能还要强大,所以如果我们使用 Qt 作为基础库,那么就没有必要使用C++11 的智能指针。Qt 的智能指针包括:QSharedPointerQScopedPointerQScopedArrayPointerQWeakPointerQPointer原创 2017-09-03 21:19:17 · 34414 阅读 · 1 评论 -
应用笔记-Qt 程序中使用 Live 20R 指纹采集器
应用笔记-Qt 程序中使用 Live 20R 指纹采集器最近一个项目需要用到指纹认证。就在某东上随便搜了个销量比较大的指纹采集器,就是今天这个笔记的主角(Live 20R 指纹采集器)。花了几天时间研究明白了这个小东西是如何使用的。 Live 20R 指纹采集器本身提供了 SDK 开发包,叫做 ZKFinger SDK,我使用的版本是 5.0。这个 SDK 里提供了 ActiveX 接口和 C 语原创 2017-10-13 15:23:06 · 12182 阅读 · 14 评论 -
QZXing 的编译和使用
QZXing 的编译和使用QZxing 是对 zxing 的一个封装,用于在 Qt 程序中加入条形码和二维码识别的功能。这里就讲讲如何编译和使用这个库。 前几年 QZXing 的代码是放到 sourceforge.net 上的,现在迁移到了 github.com。所以下载最新的代码要去:http://https://github.com/ftylitak/qzxing/可以用git 来下载,也可以原创 2017-10-19 21:54:14 · 6891 阅读 · 3 评论 -
qt 程序中读取 DXL360 倾角仪的数据
最近需要测量水平倾角,就从网上找了个 DXL360 倾角仪。就是下面照片里这东西。 这东西说实话挺山寨的,我现在也没搞明白网上那么多品牌到底是谁山寨谁。反正就是买了几个,凑合用吧。这东西提供了个 USB 接口,插在电脑上之后会虚拟出个Serial port。因此读取数据就是从串口中获取数据之后解析一下。没什么难度,代码放这里做个备忘,希望对大家也能有用。DXL360 通过串口传来的数据格式为 X+原创 2017-10-28 21:12:56 · 1663 阅读 · 0 评论 -
Qt(C++) 截屏的方法
最近一个Qt(C++)的项目需要用到截屏的功能,就花时间研究了一下如何实现。 Qt 确实是好用,截屏只需要下面三行代码就够了。QDesktopWidget *desk = QApplication::desktop();QScreen * screen = QGuiApplication::primaryScreen();QPixmap p = screen->grabWindow(desk-原创 2017-07-01 21:46:50 · 7436 阅读 · 1 评论 -
Qt 中获取摄像头图像数据的方法
Qt 中获取摄像头图像数据的方法在 Qt 中提供了 QCamera 类用来操作摄像头。(这里的摄像头指的是电脑上常用的那种 USB 摄像头或网络摄像头,暂时还不支持工业相机。)摄像头获取的实时图像可以显示在 QCameraViewfinder 或 QGraphicsVideoItem 上,QCameraImageCapture 可以获取静态的图像,QMediaRecorder 可以用来录像。用这些现原创 2017-06-17 20:34:11 · 26816 阅读 · 7 评论 -
Qt 5 中解决中文乱码的方法
Qt 5 中解决中文乱码的方法在 Qt 4 的时代,解决中文乱码挺麻烦。要考虑用的是什么编译器,具体的可以参考下面这篇文章: http://blog.youkuaiyun.com/brave_heart_lxl/article/details/7186631到了 Qt 5 的年代,这个问题变得简单了些。因为根据 Qt 的文档: http://doc.qt.io/qt-5.6/qstring.html#QSt原创 2017-05-21 11:47:53 · 36038 阅读 · 5 评论 -
谈谈 Qt 程序安装包的大小,以及简要打包指南
(本文是水木社区KDE与Qt编程技术版版主的文章,我觉得写的很好,就转载过来了,原文地址:http://hgoldfish.com/blogs/article/103/)经常看到网上有些论调说 Qt 程序无比庞大,甚至拿 .NET 程序来比,说 Qt 程序打包以后跟 .NET 安装包差不多大。由此影响了很多人对 Qt 的选择。我觉得有必要对此做一些澄清—— 显然这个说法是错误的!! 很容易理解,虽然转载 2017-03-03 20:37:46 · 18244 阅读 · 10 评论 -
QtChart 初体验
早就知道 Qt 5.7 中引入了 QtChart 模块。一直没时间试用。周末正好空闲,就简单的试了试 QtChart。QtChart 学起来还是挺简单的,基于 Qt Graphics View Framework,只要了解 Qt Graphics View Framework 是怎么回事,那就没有任何的难度。下面是我写的一个简单的测试代码,画了个简单的 sin 曲线。 程序中 QChartView原创 2016-10-22 22:37:35 · 11507 阅读 · 1 评论