C++\QT
文章平均质量分 52
C++\QT方向知识记录及分析。
码肥人壮
三好员工: 好困好饿好想下班。
展开
-
qt中读写锁与互斥锁的区别
在Qt中,读写锁(QReadWriteLock)和互斥锁(QMutex)都是用于多线程编程时控制共享资源访问的工具,但它们在实现上有一些重要的区别。总的来说,互斥锁适用于对资源的独占访问,而读写锁则适用于读取操作远远多于写入操作的情况,它们的选择取决于程序的需求以及对性能的要求。原创 2024-02-19 19:58:32 · 789 阅读 · 0 评论 -
qml元素详解
QML是一种描述用户界面的声明式语言,它将用户界面分解成一些更小的元素,或者说是由一个个元素堆积、结合成一个组件。QML语言不仅需要描述了用户界面的形状,还需要描述其行为。原创 2024-01-03 10:55:50 · 1135 阅读 · 0 评论 -
qt模拟鼠标事件
qt模拟鼠标事件,包括点击、移动..........原创 2023-09-12 16:33:17 · 1491 阅读 · 0 评论 -
qt触控板手势检测
主要检测双指上下滚动、左右滚动、双指放大、缩小原创 2023-09-07 10:29:26 · 908 阅读 · 0 评论 -
C/C++中变量按位操作
原理就是按位取反相交,掩码…00010000取反后为…11101111,按位相交,与为1的位相交保持原值,与为0的位相交为0。原理就是原值与掩码…00010000进行按位相与,与0相交的位还是等于原来的值,与1相交的位则变为1。原创 2023-08-01 14:06:57 · 413 阅读 · 0 评论 -
mac下qtcreator代码格式化
代码开发:qtcreatorqtcreator 插件:Beautifier格式化工具:clang-format。原创 2023-06-21 15:39:25 · 697 阅读 · 0 评论 -
C++运行时间录制类
代码并非纯C++,而是使用了qt,如有需要,剔除qt部分的代码就可以直接使用。原创 2023-06-13 15:16:22 · 152 阅读 · 0 评论 -
qt加载第三方字体
软件开发中,需要绘制很多icon,或者一些特殊字体,这个时候就可以添加自己的字库作为一种解决方案。原创 2023-06-12 10:11:31 · 1589 阅读 · 0 评论 -
QCamera读取视频后转QImage
在上面的代码中,我们通过连接QCamera的frameAvailable信号来获取视频帧,然后使用QVideoFrame类的方法将视频帧转换为QImage。读取摄像头视频后,可以通过QVideoFrame类来将视频帧转换为QImage。QVideoFrame类提供了许多便捷的方法来访问和操作视频帧数据,可以使用这些方法来实现将视频帧转换为QImage的功能。需要注意的是,QVideoFrame提供了多种像素格式,需要根据实际情况进行判断和转换。如果像素格式无法转换为QImage的格式,则需要进行格式转换。原创 2023-03-11 15:02:26 · 888 阅读 · 0 评论 -
qt绘制渐变色
【代码】qt绘制渐变色。原创 2023-03-10 10:23:42 · 686 阅读 · 0 评论 -
qScopeGuard应用及分析
QScopeGuard 是一个类,其唯一目的是运行函数f在它的析构函数中。这对于保证执行清理代码很有用,无论函数是正常退出、通过return 语句提前退出还是通过异常退出。qScopeGuard的作用是确保资源面对异常时总能被成功释放,就算没有正常返回,比如在函数中间任意位置return(参考下面的qScopeGuard应用示例)。原创 2023-03-03 17:50:07 · 258 阅读 · 0 评论 -
多平台下long类型遇到的坑
我遇到的问题是,macos下用long存储时间戳,程序运行的很好,但是在windows下就是不行,通过一番排查,确定为long变量越界导致的问题。在跨平台应用程序开发中,macos64系统中的long为8字节长度;而在win64下面,long长度为4字节。原创 2023-02-17 09:49:55 · 328 阅读 · 0 评论 -
qt开关控件设计(手把手从零开始)
从零开始教你qt自定义控件设计,使用switch开关控件作为例子。原创 2023-01-01 11:18:19 · 5555 阅读 · 15 评论 -
qtcreator调试经常断点导致卡死问题解决
qtcreator调试经常断点导致卡死问题解决原创 2022-11-15 17:37:57 · 4759 阅读 · 0 评论 -
qt制作颜色选择控件
目标制作一套相对底层的颜色选择控件,内容包含各种颜色选择器,颜色选择按钮,颜色lab等。2、颜色按钮,点击按钮可出现颜色选择窗口或菜单。1、颜色lab,用于现实颜色,支持被选中状态。(4)自由颜色+可选颜色。(3)可选颜色+透明度。...原创 2022-07-15 15:57:42 · 1288 阅读 · 0 评论 -
qt颜色与字符串、uint相互转换
软件开发中,很多设置需要使用json或者其他配置文件保存颜色值,把颜色拆成红、绿、蓝、透明度四个字段太麻烦了。下面就是使用一个字段保存颜色的方法,就是将颜色保存为字符串,再将字符串解析成颜色。示范代码输出样式如下:字符串转颜色示范代码.........原创 2022-07-05 11:34:03 · 2103 阅读 · 0 评论 -
qt捕获界面为图片或label显示
在软件的开发中,有些特殊的功能实现,需要去截取ui的界面图片,比如我们在实现某些动画中,直接控制ui界面或控件是无法实现的,就算能够实现也是大打折扣,像翻页效果、旋转效果等等。以上问题,在qwidget可以使用grab()函数截取界面或控件为QPixmap对象,然后保存为图片也好,label显示实现你想要的动画也好。代码如下:...原创 2022-06-30 09:12:37 · 850 阅读 · 0 评论 -
qt下多个子控件信号槽绑定方法
在软件一些界面开发中,需要用到批量相同的控件,比如一些设置界面有几十个lineedit输入框,又或是许多个checkbox控件,如下图所示(qt的设置界面):其中设置,只要有一个控件做出改动都需要去实时刷新保存参数,这样有什么方案呢?1、如果控件有规则,比如代码是使用for循环new的对象,我们就可以在new了之后的循环内容中加入你的槽函数。2、第二种情况就是分开new的对象,难道每个对象new的时候都coonnect一次?那如果是qt designed设计界面中拖进去设置的界面呢?针对这种情况下我们就原创 2022-06-24 11:58:00 · 1512 阅读 · 4 评论 -
qt重载的信号槽函数绑定方式
在qt中,信号槽本质都是函数,在C++中是函数就可以重载,所以有些情况下我们会对qt的信号或槽函数进行重载。在qt5及其以后,qt的信号槽绑定是可以使用函数指针绑定,这时候我们需要进行绑定的时候,那具体是绑定的哪个函数?比如下面例子:真的出现这样的情况了,可以使用下面操作选择对应的重载函数:因此信号槽改为如下样式:选择重载的槽函数同理。......原创 2022-06-07 15:58:53 · 1647 阅读 · 1 评论 -
qt项目添加编译报错选项
在大型的项目开发中,由于开发代码量过多,开发人数过多且风格各有特色,导致代码质量难于把控,除了编码上面统一的一些规范外,在qt项目中我们可以使用如下参数设置对代码的编译进行初步过滤,把不规范或者无用的代码使用编译报错的方式过滤出来。从上面注释来看,其实就是给编译器传参数,从而控制编译的过程,一定程度上实现编译器自定义控制。......原创 2022-06-06 17:40:36 · 1419 阅读 · 0 评论 -
qt项目转Xcode项目(Xcode开发qt)
前沿mac开发中,很多都是使用的Xcode作为开发ide,虽然qtcreator很优秀,但是听说Xcode更好用(刚刚用mac,道听途说,所以也不是很了解)那好吧,就用Xcode做一个qt开发试试。刚刚接触Xcode,感觉其功能还挺丰富,界面也还行,期待后续感受。一、原理使用qmake命令+参数做转换。举个例子如下所示:/Users/qt/5.9.5_macosx_build/bin/qmake qtToXcode.pro -spec macx-xcode/Users/qt/5.9.5_m原创 2022-04-27 19:13:07 · 2763 阅读 · 2 评论 -
最全面的qt自定义弹窗设计
1、首先窗口属性设置this->setAttribute(Qt::WA_TranslucentBackground, true); //设置窗体透明this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); //设置无边框,置顶this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); //设置无边框,Dialog模式原创 2022-04-11 16:47:13 · 4803 阅读 · 0 评论 -
信号槽绑定失败原因
1、信号槽参数未被注册。需要使用qRegisterMetaType进行注册。2、对象未声明Q_OBJECT宏。3、信号、槽对象未被实例化。原创 2022-03-25 14:33:04 · 560 阅读 · 0 评论 -
qt按钮样式
qt种按钮样式设置,显示效果如上图所示。qss代码:/**正常情况下样式**/QPushButton{ font: 10pt "微软雅黑"; color: #2f3640; background-color: #f5f6fa; border-color: #2f3640; border-radius: 15px; border-style: solid; border-width: 2px; padding: 5px;}/**鼠标停留在.原创 2022-03-01 15:45:40 · 11896 阅读 · 2 评论 -
qt样式qss示例
qss文件加载 QApplication a(argc, argv); QFile qss(":/Resources/myStyle.qss"); if(qss.open(QFile::ReadOnly)) a.setStyleSheet(qss.readAll()); ... return a.exec();qss文件内容示例:/*****下拉框****************************************************原创 2022-03-01 14:45:36 · 3422 阅读 · 1 评论 -
qt花样提示框实现
效果比如软件关闭时使用,实现软件闪躲功能。 实现思路实现思路很简单,就是继承QFrame类,然后在界面里面放置两个QLabel对象。一个lab用于显示背景图,一个用于显示提示的文字。背景图百度一张图片,然后扣掉背景,如下图所示:显示文字的QLabel需要矫正位置在框内,然后显示内容居中、自动换行等等设置。因为没有手动关闭功能,所以还需要定时自动关闭,其实该实现与我之前写的一篇轻弹窗文章是一样的实现。轻弹窗:https://blog.csdn.net/weixin_428873原创 2022-02-18 16:15:00 · 1659 阅读 · 2 评论 -
qt实现插件管理与开发
1 说明相关开源代码:https://gitee.com/jiangtao008/GoSlowDetection/tree/master相关项目介绍:https://blog.csdn.net/weixin_428873432 设计2.1 插件设计2.2 插件管理模块设计3实现3.1插件实现3.1.1qt自带的接口插件插件接口此插件接口为qt库自带,如使用QGenericPlugin类为插件接口,qt插件接口种类可查看看下图:插件h文件#ifndef QTTESTPLUGIN_H原创 2022-02-18 09:51:34 · 1559 阅读 · 1 评论 -
qt动画载入、关闭窗口
实现效果设计思路利用qt的动画类,实现窗口的移动动画进行设计。载入窗口,先创建窗口后显示,再设置动画启动点与结束点,即可实现窗口移动载入;关闭窗口即执行相反的操作即可。代码实现下面代码对OverviewWindow 窗口实现动画载入与关闭。#include "overviewwindow.h"#include <QApplication>#include <QDesktopWidget>#include <QRect> OverviewWindow原创 2022-02-16 10:54:32 · 1273 阅读 · 0 评论 -
共享内存同步封装
说明en en en en engitee项目代码托管地址:https://gitee.com/jiangtao008/shareMemory.git读写模式符号说明信号量自旋等待当一个进程试图去获取一个已经锁定的信号量时,该线程不会像自旋锁一样在自旋忙等待,而是会将自身加入一个等待队列中去睡眠,直到其他进程或线程释放信号量后,处于等待队列中的进程才会被唤醒。信号量释放释放信号量,用于唤醒其他进程或线程。直接写入模式约定写入模式条件读取模式约定读取模式读写模式匹配无条原创 2022-02-15 11:12:55 · 1627 阅读 · 0 评论 -
cpp类序列化输出
说明在软件开发中,经常需要将整个类数据持久化,比如将配置类中的成员数据保存到配置文件,又或是对一些场景数据进行导出导入,这个时候就需要一个数据转换,如下图:思路1、使用数据流方式输出到文件。考虑到类的类型不确定性,所以我们需要使用模板参数传入,然后将模板转为数据流。2、从类到文件,我们分两步,先将类模板转为 hex类型,然后hex类型直接写入文件。3、一般类不支持数据流操作,所以我们需要对我们的数据类实现操作符重载。实现实现代码参考QxOrm项目的序列化模块。1 导出类 到 hex数据原创 2022-02-11 12:48:12 · 2020 阅读 · 0 评论 -
QT信号槽的5种连接方式
qt源代码定义的连接方式如下:1、Qt::AutoConnection一般信号槽不会写第五个参数,其实使用的默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。2、Qt::DirectConnection槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程,有点类似于回调函数。效果看上去就像是直接在信号原创 2022-01-06 15:25:19 · 9109 阅读 · 1 评论 -
C++中的Lambda函数
一 函数语法我们平时调用函数的时候,都是需要被调用函数的函数名,但是匿名函数就不需要函数名,而且直接写在需要调用的地方,对于以前没用过的小伙伴来说,第一眼看见了这语法可能很迷惑。C++11的基本语法格式为:[capture](parameters) -> return_type { /* ... */ }(1) [capture] :[]内为外部变量的传递方式,值、引用等,如下[] //表示的是在lambda定义之前的域,对外部参数的调用;[=] //表示外部参原创 2021-12-23 11:42:46 · 14761 阅读 · 0 评论 -
摸鱼检测小软件
基于qt写的摸鱼检测小软件。原创 2021-12-03 15:01:11 · 1150 阅读 · 3 评论 -
qt设置进程开机自启动
qt程序内部,有时候有个设置选项,就是是否设置开机启动。下面代码就是实现开机启动设置和取消的功能,具体请看代码://判断系统是否为64位bool is64BitSystem(){ typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); PGNSI pGNSI; SYSTEM_INFO si; ZeroMemory(&si, sizeof(SYSTEM_INFO)); pGNSI =(PGNSI) GetProcAddr原创 2021-12-01 14:54:54 · 5618 阅读 · 9 评论 -
为什么要重写拷贝构造、拷贝赋值函数
C++类中,编译器默认分配拷贝构造、拷贝赋值函数。如下代码:class A;A a1;A a2(a1); //拷贝构造a2 = a1; //拷贝赋值特殊情况下需要自己写拷贝构造、拷贝赋值函数。可是为什么?如果类中存在指针类型,其指向的数据可不在类中 ,这个时候去拷贝构造、拷贝赋值,拷贝的都是指向数据的指针,而实际的数据未被拷贝。这样导致的结果就是,两个类指针指向的数据是一样的,实际存在的数据只有一个。拿string类举例,如果默认使用编译器提供的拷贝构造、拷贝赋值函数,拷贝后的类和原来的额类原创 2021-11-30 22:33:09 · 1235 阅读 · 0 评论 -
qt鼠标键盘钩子类设计
说明什么是钩子?Windows系统程序的运行是建立在消息传递机制的基础之上的,几乎所有的程序活动都由消息来驱动。钩子机制可以看作是一个消息的中转站,控制系统发出消息的处理和传递。利用钩子,我们可以截获系统发给应用程序的消息,并且在经过处理后决定是否将消息再发给下一个应用程序。在qt程序中,一般使用事件系统进行鼠标、按键输入的检测,但是这是有个前提条件的,就是需要聚焦在主界面或里面的对象中。如果聚焦不在软件上面,其他地方点击鼠标或按下键盘则无法检测,这时候就需要用到Windows下的钩子技术,使用原创 2021-11-30 16:58:51 · 2110 阅读 · 1 评论 -
QSplitter分割部件使用
QSplitter类是一个控件类,继承于QFQSrame,而QFrame又继承于QWidget类,所以QSplitter实例化后也是显示的控件或者窗口。QSplitter的主要目的是用于处理多个控件之间的宽度或高度变化。如下QTcreator界面的例子:控件1和2之间可以上下拉动,控件3和1、2组成的控件又可以左右拉动,这就是QSplitter实现的效果。下面展示一个简单的demo,6个控件的组合显示。demo代码,直接将下面的代码加入到你的mainwindow的构造函数中即可:#include原创 2021-11-29 15:29:19 · 1616 阅读 · 0 评论 -
中英文数字字符串排序(标准库)
需求对ui显示的表格进行排序,需支持中文字母排序,但是sqlite数据库不支持中文的拼音和笔画排序,这样就会导致排序中文显示顺序无规律。这个时候,就需要自己写一个排序功能,且排序支持中文拼音排序。示例有一个字符串链表,有n个字符串,需要对这些字符串进行排序(支持中文拼音排序)。代码定义如下:QStringList list; list<< "1中中句" << "方法" << "2中句中" <<原创 2021-11-26 15:25:39 · 1167 阅读 · 2 评论 -
QTableWidget点击表头排序
方法重写QAbstractItemModel类的sort()函数。思路1、QTableWidget显示表格数据,为了达到一些自定义操作,经常需要自己写数据模型类和表头类,如下代码: m_model = new MyDataModel(this); m_headerView = new MyHeaderView(Qt::Horizontal, ui->tblvKits); ui->tblvKits->setModel(m_model); ui->t原创 2021-11-22 15:18:15 · 2905 阅读 · 0 评论 -
函数可变参数
方法一:#include <stdarg.h>void testFunction_1(int arg1,...){ va_list ap; int i; va_start(ap, arg1); for (i = arg1; i != -1; i = va_arg(ap, int)) printf("%d ", i); va_end(ap); putchar('\n');}int main ( int argc, char** ar原创 2021-11-16 14:26:21 · 350 阅读 · 0 评论