自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (6)
  • 收藏
  • 关注

原创 c++ 线程池/Github 开源项目源码分析(progschj/ThreadPool)

维基百科上对线程池的简要介绍:线程池(thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。ThreadPool 项目地址是一个简易的基于 c++11 标准的线程池实现,采用了。

2024-03-20 09:40:45 923

原创 Qt QTableWidget 实现行选中及行悬浮高亮

表格整行的selected、hover高亮需求很常见,但使用Qt提供的开箱即用的方法根本无法实现这个需求(至少在当前的时间节点是不行的);想要实现这个效果必须要费一点点力气,我们尽量选择较为简单的方法。

2024-03-16 17:23:49 849 3

原创 QDateEdit/QDateTimeEdit 设置默认显示空值(无需子类化控件)

这种方式互联网上资料很多,自行搜索就好,我们主要讲第二种方法。对细节没有太多要求的话可以选择这种方式。

2024-03-15 13:52:12 466 2

原创 Qt全球峰会2023中国站 参会概要

在今年三月份的某一天,意外的发现,我所关注的公众号“Qt软件”,头像由原本清新的绿色变为了厚重的黑色→习惯了清新绿的我有些奇怪,正好 Qt 在我常使用的 B站 有运营着活跃的官方账号,于是尝试在该账号的视频下留言“logo由绿变黑是有什么寓意吗?”,得到了如下回复:再进入Qt官网查看,发现已由Qt Company变为了Qt Group,惊觉自己对 Qt 的认知还停留在从前,于是在九月下旬得到Qt全球峰会中国站在上海召开的消息推送时,第一时间报名,最终审核成功,有幸参与了Qt全球峰会2023中国站。

2023-11-21 23:33:26 1066 6

原创 Qt私有信号实现(private signal)

在使用Qt信号槽机制的时候,有时候我们需要一个信号只能由类内发出,而不允许使用该类对象的用户发出,此时就需要私有信号的支持,而信号的关键字再次点进去:继续:可以看到,无论你使用 private 也好,protected也好,最后预处理宏展开的时候都会被加上 public,想使用私有信号需要一点小技巧;

2023-10-24 19:32:32 815

原创 Windows 下 Qt 可执行程序添加默认管理员权限启动(QMAKE、MinGW & MSVC)

记录 Qt/QMAKE 为可执行程序添加管理员权限。

2023-10-08 18:12:54 929

原创 从面向过程到面向对象

面向对象三大特征、六大设计原则

2023-08-18 16:46:07 168

原创 c++模板编程-非类型模板参数

通常它们只能是整形常量(包含枚举),指向objects/functions/members 的指针,objects或者functions的左值引用,或者是std::nullptr_t(nullptr decltype 出来的类型)。和类模板使用类型作为参数类似,可以使代码的另一些细节留到被使用时再确定,只是对非类型模板参数,待定的不再是类型,而是某个数值。需要注意的是,如果在表达式中使用了 operator >,就必须将相应表达式放在括号中,否则 > 会被语法解析为模板参数列表末尾的尖括号,导致错误。

2023-07-15 19:58:59 238

原创 c++模板编程-模板类的特例化和部分特化

以上实例化为类型 A 特化的模板的使用,调用calculate函数会打印 “Unsupported type!”,调用print函数则会打印 A 类型的id;,我认为这是难以理解且不够形象的。,接下来我们使用被特化的模板。有了全特化,对应的自然有。

2023-07-05 23:01:14 225

原创 c++模板编程-两阶段编译检查

以上就是一个简单的模板函数,它返回两个数的和,如之前所说,函数模板代表的是一组函数,所以这个模板定义了一组函数,无论是什么类型,它都返回两个参数的和(前提是这个类型支持和运算)。template < 用逗号分割的模板参数 >在例子中,T 是类型参数,你可以起任何名字,它可以代表任意类型,它在模板被调用的时候决定是什么类型,但是该类型必须支持它所做的事情,如例子中,两个 T 类型的参数必须支持加法运算,否则就会导致编译不通过。由于某些历史原因,我们还可以用class。

2023-05-29 22:16:37 434

原创 Android 原生新的打开蓝牙策略(替代startActivityForResult)及配置蓝牙权限

Android-Java 打开蓝牙

2022-08-10 16:59:04 2773

原创 (QMake)Qt pro文件中定义全局条件编译变量并使用

在Qt平台下开发时我们经常使用如操作系统判断、编译器判断等变量来进行跨平台项目的开发,QMAKE也允许我们自定义全局条件编译变量。pro文件中定义变量并判断:DEFINES += CONDITIONcontains(DEFINES, CONDITION){message(Exist.)}else{message(Not exist.)}以上 QMAKE 规则将在执行 qmake 时打印 “Exits.”,注释掉 DEFINES += CONDITION 将打印“Not exits.”

2022-03-20 17:22:37 2391

原创 Windows下使用windeployqt打包QML项目(双击运行无反应)

QWidgets 打包请转去Windows使用 windeployqt 打包 Qt/QWidgets 项目使用 qml 构建 Qt 项目后,一直没有在 Windows 下打包发布过,原以为像是和 QWidgets 一样,结果今天打包就打了脸,现象就是双击运行可执行文件没反应,让人郁闷。QWidgets 项目打包只需要在 exe 所在文件夹下键入 windeployqt.exe xx.exe 然后等待打包完毕就OK,而涉及到QML就需要加一个 –qmldir 参数,如下windeployqt.exe

2022-02-25 17:54:55 3168 20

原创 Qt/QWidgets 中使用 OpenGL,画出第一个三角形(附工程)

在 LearnOpenGL 学习opengl的时候,示例中使用的是 glfw 这个应用框架去承载opengl,这个工具我们在工作或学习中是不必要使用的,Qt 对opengl的支持相当完善,我们将学习在Qt中使用opengl。在Qt5.4之前,Qt 使用 QGLWidget 类来承载opengl的渲染,在 QGLWidget的文档中有如下内容:This class is obsolete. It is provided to keep old source code working. We strong

2022-01-11 13:36:55 705 1

原创 Qt 自定义信号强度显示控件

Qt 自定义信号强度显示控件,适合新手学习。

2021-12-08 12:04:09 981

原创 Qt嵌入式解决方案(Qt5.14.2 + opengl 交叉编译移植至Jetson Nano 详细步骤)

在我需要将Qt应用程序运行到嵌入式arm linux平台上时,我了解到了两种方案:Qt for Device Creation + Boot to Qt,这项技术相当诱人,虽然只有商业版Qt能够使用,但用了这么久的开源版本Qt,为其适当的付费也未尝不可;但是当我在Qt的官网上了解到公司商用Qt需要留下资料协商定价后,我就打消了这个念头,因为这充满了未知,谁也不知道他们想要如何定价,在Qt的官网上还有着相当嘲讽的广告:交叉编译Qt源码,移植至arm linux,网上大部分资料都是较为老的Qt版本,.

2021-11-10 16:01:58 10915 27

原创 Qt pro文件中判断 x86/arm(aarch64)交叉编译环境,区分 linux/windows系统, debug/release版本

使用的arm编译器为aarch64, 很多博客都是使用 QMAKE_HOST.arch 进行判断,但这并不能分辨出 aarch64 编译器,有的更离谱的是定义一个函数,实在让人无言,自行尝试解决方案如下:contains(QT_ARCH, arm64){message("arm64") #在这里处理arm64所需}else{message("x86")}linux/windows 区分:win32{//do something...}unix{//do something...}

2021-11-08 15:26:58 5326

原创 C++单例模式模板 (简单易懂且有效)

单例模式几乎是最常用的设计模式,简单易懂,使用起来效果显著,在此也不对单例模式做剖析,不了解的可以自行查阅资料。项目中多次使用单例模式后发现每次都是重复的构建单例类,于是做了一个单例模式的模板。//单例模板//delete 与 default 来自于 c++ 11template <typename T>class Singleton { //使用默认构造和析构函数 Singleton() = default; ~Singleton() = default;p

2021-09-28 16:42:36 3506 5

原创 c++/Qt 使用 boost 库

最近因为一些需求,需要去使用大名鼎鼎的 c++ / boost 库,在此作一个记录,分享给大家也避免自己忘记。首先下载boost点这里去下载boost进入boost官网,点击右侧框中的Download(点左边的不太符合预期), 如图:进入下载选择页面,选择自己需要的系统及格式,我这里是先在win10测试,选择了boost_1_77_0.zip:下载并解压zip文件;编译boost:解压后如图,此时是没有我选中的这两个文件,我的是编译过的:在开始菜单 visual studio 目录中打

2021-08-19 10:49:30 1101

原创 数据结构之二叉树(构建及前序、中序、后序、层次遍历)

二叉树(Binarytree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。树的学习比较依赖递归思想.

2021-05-20 15:33:09 248 1

原创 QTableWidget表头加入QCheckBox(复选框表头)

最近发现在QTableWidget的表头中加入复选框这个需求较为普遍,网上相关的资料却很少,实现此功能所需相关的Qt方法也较为冷门,特作此分享。主要实现方法为重写QHeaderView类的*void paintSection(QPainter painter, const QRect &rect, int logicalIndex) const; 函数和 *void mousePressEvent(QMouseEvent event); 函数,下面直接贴完整代码和示例,方便大家使用。1.头文件如

2021-05-10 09:41:31 4478 15

原创 c/c++简单实现栈与队列模板

完整代码,直接copy可测试效果。1.栈栈,又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。template <class T>class Stack{ T *m_space; //栈空间 int m_si.

2021-04-30 10:09:51 239

原创 c++实现循环链表(增、删、插入、遍历)

循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。结点类:class Node{public: int data; //数据域 Node *next; //指针域};结尾增加:void append(Node **head, int data){ if(*head == nullptr) { *head = new Node; (*head)->data = dat.

2021-04-19 09:55:40 1137

原创 c++实现单链表头插法、尾插法、删除、遍历

最近复习数据结构与算法,先从单链表开始。首先明确链表参数为 ** head(即二级指针)的原因:只要是要修改head指针必须传递head的地址(用**head),否则传递head值即可(*p)。与普通变量类似,当需要修改普通变量的值,需传递其地址,否则传递普通变量的值即可。首先定义Node类,即链表的结点:class Node{public: int data; //数据域 Node *next; //指针域};老生常谈,头插法上一张动图:1.创建头结点Node *

2021-03-17 16:15:55 2722

原创 QCustomPlot帮助文档加入到QtCreator

QCustomPlot是一个用于绘图和数据可视化的Qt c++小部件。它没有进一步的依赖关系,并且有很好的文档记录。这个绘图库专注于制作好看的、具有出版质量的2D图、图形和图表,并为实时可视化应用程序提供高性能。看一看设置和基本绘图教程开始。QCustomPlot可以导出为各种格式,比如矢量化的PDF文件和栅格化的图像,比如PNG、JPG和BMP。QCustomPlot是用于在应用程序中显示实时数据以及为其他媒体生成高质量图表的解决方案。个人觉得Qt的帮助文档非常好用,对Qt的学习只要入门,遇到不.

2021-03-02 18:51:02 851

原创 QTableWidget 常用方法大赏

QTableWidget常用方法的收集1.设置列表头tableWidget->setColumnCount(3);tableWidget->setHorizontalHeaderLabels(QStringList() << "第一列" << "第二列" << "第三列");2.设置列宽tableWidget->setColumnWidth(0, 100);tableWidget->setColumnWidth(1, 100);.

2021-02-26 12:26:25 470 2

原创 Qt QSharedMemory(共享内存)实现单例进程

int main(int argc, char *argv[]){ QSystemSemaphore sema("CLGObject",1,QSystemSemaphore::Open); sema.acquire(); // 在临界区操作共享内存 QSharedMemory mem("CLGSystemObjcet");// 全局对象名 if (!mem.create(1)) // 如果全局对.

2020-10-24 18:45:20 555

原创 python语法快速入门

和c#中的foreach一样,c++11标准中的 for 也有类似功能,注意关键字后仍然有冒号,代码块也是由tab键或者四个空格控制;字典是一个无序的数据集合,key是索引,value是数据,键和值之间用 : 分隔,键是唯一的;与其它面向对象语言类似,只不过构造函数与析构函数必须是特定的名字,且参数列表中必须有。python 也有 continue 与 break 关键字,功能与其他语言一致;python的变量不用预定义,python语句后不用加分号。,成员函数参数列表中也必须有self,

2020-06-13 16:47:58 994

原创 Qt多线程之-moveToThread(附demo)

在最初学习Qt的多线程时,我们往往接触到的是创建一个继承与 QThread 的类,重写并调用 run() 函数的方式;从Qt 4.4开始,Qt官方推出了新的线程使用方式,并推荐使用该方式,就是我们接下来要讲的 moveToThread。下面对moveToThread进行简单的演示:1.首先创建一个Qt工程,并添加线程类右键工程,添加一个继承于 QObject 的类(我这里叫 MyThread),并在主线程的.h中添加新类的头文件;2.主线程类中添加成员MyThread* myThread 与 QT

2020-05-22 13:09:13 3573 3

原创 C#多线程之 Task 的简单使用

在C#4.0之前,执行一个复杂的异步操作时,只能使用CLR线程池技术来执行一个任务,线程池执行异步任务时,不知道任务何时完成,以及任务的在任务完成后不能获取到返回值。在C#4.0中引入了Task来解决异步操作完成时间和完成后返回值的问题。命名空间:System.Threading.Tasks下面我们来对Task进行简单的演示:1.Task的创建(1)构造函数的方式创建TaskTask t...

2020-04-04 15:27:08 720

原创 c# winform 项目在 Visual studio中调出控制台

在c#的 Winform 项目中,有时候我们想用打印数据信息的方式去了解某个数据,但是Winform项目是不显示控制台的,怎么办呢?以下就是在Winform中调出控制台的方法:1.首先我们要引入命名空间:using System.Runtime.InteropServices;2.在程序入口(Main函数)所在的namespace中加入以下四行: [DllImport("k...

2020-03-11 15:26:11 1652

原创 Opencv入门:imread、imwrite、imshow、cvtColor的使用

一、imread1.加载文件图像成为一个 Mat 对象,nameWindow 功能是创建一个OpenCV窗口;(存在一个和QT结合的修改窗口大小的宏 CV_WINDOW_NORMAL);2.第一个参数是图像文件名称(路径),第二个参数参数表示加载的图像是什么类型(以下三个宏);无参就是>1;宏:IMREAD_UNCHANGED(<0) ,表示加载原图,不做改变;IMREA...

2019-10-24 16:28:09 740

原创 Qt使用自带工具windeployqt打包应用程序

Qt项目完成之后,就到了打包发布环节了,使用Qt自带的打包工具可以方便的完成依赖库的打包,步骤如下:1.系统搜索QT,出现前缀为安装QT版本号图标为黑色矩形的应用;2.选择自己使用的编译器版本,MinGW/MSVC 及 32bit/64bit要分清楚,否则会出现0x00007b等错误;3.打开第二步选择的工具,会出现类似cmd终端的窗口如下:4.键入cmd指令 “cd 你的应用程序路径”...

2019-10-11 16:48:47 965 1

qt-opengl.zip

在Qt/QWidgets中使用opengl

2022-01-11

ThreadDemo.zip

Qt多线程 moveToThread 使用样例

2021-12-18

test.zip QOpenglWidget用于测试opengl交叉编译的功能完备性

Qt5.14.2交叉编译arm平台测试例程

2021-11-10

qmake.conf 文件

Qt5.14.2交叉编译配套qmake.conf文件

2021-11-10

autoconfig.sh

交叉编译Qt5.14.2 configure参数脚本

2021-11-10

headerdemo.zip

QTableWidget 表头添加QCheckBox(复选框)

2021-05-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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