自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苏州-青蛙

跨平台C++/Qt客户端开发,部分音视频处理以及医学三维重建的经验

  • 博客(138)
  • 收藏
  • 关注

原创 开源项目:Qt封装自绘控件库

GuitHub地址:https://github.com/ArmstrongOne/Qt-CustomControls环境:用VS2015以及qt-vs-tools-msvc2015-2.0.0插件以上版本直接编译运行--个人用Qt封装了下一些还算好看的控件--接口都还算完备--基本上一个控件一个头文件加一个实现文件。--分了一些类,现在有进度条,滑动条,仪表盘,统计图,动画,按钮,还有一些还不错的软件页面--现在量不是很多,之后遇到好看的的还会实现再添加下面贴一些图:

2020-08-17 16:43:52 2757 2

原创 Muduo(C++11版本) 源码剖析(一)———总体架构

前言: 目前虽然一直是C++/Qt偏客户端的方向,但是研究了一段时间c++高性能服务器的一些架构设计,正好学习了一款flamingo这一款开源即时通讯软件,里面的网络层是用c++11改写的原来boost版的muduo,索性就写几篇博客分析下muduo这款网络库的源码,其实已经有不少人分析过该库,我在这里仅仅谈我的个人对该库设计、用法的一些理解 ,不对或者不准确的地方还请指出,有一些地方会直接引用陈硕老师的《c++linux多线程服务端编程》的原图或者原话。涉及到的关键类: ..

2020-08-13 15:27:24 3414 1

原创 QtAV学习:(一)Windows下编译QtAV

QtAV学习

2024-02-04 14:24:17 579

原创 C++接口类使用Qt的虚信号

可以看到在虚类中声明了两个public的虚函数,子类中声明了同样的两个信号,这样可以实现信号和槽的外部连接。需要注意的是连接的时候,需要将对象指针转换成QObject*,其次是上面使用的Qt4的连接方式SIGNAL/SLOT,如果使用Qt5的方式 &Class::function 会报错,如果要使用lambanda的方式需要再想办法了。项目中封装库的对外接口类,包括Qt的插件框架,希望接口类是一个比较干净的类,不需要继承自Object,与Qt无关系,但又需要它的子类使用Qt的信号和槽机制,则可以如下处理。

2023-12-19 10:12:20 174

原创 C++软件在Win平台运行总结

1.需要安装运行库:无论是exe还是动态库用的哪种平台工具集(visual2010-visual2019)进行编译,需要安装对应的运行时库vc_redist.x64.exe/vc_redist.x86.exe。比如Exe用的是VisualStdio2010工具集编译,其中链接的一个库是VisualStdio2019编译,则是安装2010/2019运行时库都要安装。出现过安装了运行时但是缺少如下库,之前了解过是windows的一些用于转发的dll库,但是具体原理还未知,还需要进一步了解。

2023-12-05 10:58:43 146

原创 C++接口传递的简单总结

SDK新增加了一个接口,参数使用std::vector&,传给dll函数中填充数值,然后应用层拿到这个vector出现了崩溃 越界等问题,调了很久,之前知道这个问题,没有想起来,耽误了许多时间。应用层和SDK传递数据数组目前的手段还是先从sdk获取数据大小,然后数据new在应用层,sdk层对这段内存赋值,这样没有问题。之后考虑使用协议来传递数据,比如pb,json等。一方面解耦,一方面解决跨模块传递CRT导致的各种问题。

2023-11-08 11:55:47 142

原创 c++项目排序问题

2.以一定排序规则排序指定范围内的元素,但是算法不具有稳定性,如果元素的值是相同的话不保证它们的相对顺序保持不变。我们需要注意的是sort()采用的是优化版本的快速排序,在最后阶段采用直接插入排序。3.平均 O(N·log(N)) 次比较,其中 N =1.相等要返回false,不然会报错无效的数值。1.std::sort排序。

2023-06-28 11:09:46 152

转载 (Qt)QtCreator套件编译器选择

amd64_x86:编译器为amd64版本,输出文件为x86。x86_amd64:编译器为x86版本,输出文件为amd64。amd64:编译器为amd64版本,输出文件为amd64。x86:编译器为x86版本,输出文件为x86。

2023-05-23 11:54:49 879

原创 c++命令行解析

当然Qt有自己的命令行解析类QCommandLineParser。c++的命令行解析。只有一个.h文件,可直接加入项目。

2023-04-12 14:22:05 1011

原创 (Qt项视图Demo)ListWidget简单使用搜索记录窗体

使用的话可以和给外部QLineEdit搭配,接受sigSelectRecord即可。可自己复用自己改造的ListWidget使用demo。其他类似的均可由这个基础demo改造。

2023-02-23 16:55:09 470

原创 QML基础学习(零散知识点,错误很能较多,自用)

QML基础学习

2023-02-02 15:39:54 236

原创 (Qt) Qt项目的插件化

笔者之前的项目所采用的是动态库的方式让程序运行时加载DLL,最近接触的几个项目均用插件化的方式加载程序所需要的模块。一开始我也纳闷,用我浅薄的理解Qt的插件化本质还是加载的dll,只不过是可以在运行期间进行dll的加载,无需加载lib,那么这样和存粹用动态库加载区别应该不大,一些动态库自带的好处比如解耦,灵活的好处,插件化也具备,那么这两个有什么不同呢,插件化是不是还能带来纯粹动态库没有的一些好处,下面就是我自己的角度想的好处。 插件支持热插拔使应用程序的使用更加灵活,软件只需要用到的时候加载插

2022-07-14 14:18:56 1943

原创 C++标准库关联容器之map,set基础用法

之前的文章介绍了顺序容器的一些用法:c++顺序容器用法这里主要记录下两个关联容器map和set的用法,同样会多引用C++ Primer中的原文这里只介绍前两个(map,set)的一些基础用法,后面几个可以根据业务情况自己学习用法。map是键值对,set只有键关键词唯一 关键词有序或者不保证有序插入/修改:Set声明-定义-初始化:插入:查询:删除:...

2022-07-07 13:57:24 397

原创 Qt项目中的日志库log4qt使用

Qt项目中的日志库log4qt使用

2022-06-20 15:28:26 895

原创 (Qt)使用QCommandLineParser进行程序的命令行解析

在开发过程中,由于需要,有时候要对程序中的命令行进行使用,比如最近的开发任务需要用外部exe启动我们的软件,启动的时候传入一些必要的命令行参数,使我们软件启动的时候根据这些参数进行一些必要的操作,这个时候就可以使用Qt自带的QCommandLineParser这个类。Qt中是用QCommandLineOption和QCommandLineParser这两个类配合进行应用的解析。下面就直接贴出一个例子的简单使用,方便大家理解,其中涉及到一些东西也很多,长,短命令,以及多参,从最基础的用法入手,后面自己学习

2022-05-10 15:47:22 1790

原创 (Qt)记一次Qt安装器卡死的问题

今天想补充安装QChart,熟练的打开Qt安装目录下的安装器,发现点击安装器界面老是卡死,一脸懵逼,又把Qt卸载重装,一样的,后来百度发现是有道词典导致Qt安装器卡死,退出,就可以了。大写的服,如果没刷到那文章,我还不知道要耽误多少时间。开发过程中总会碰到各种问题。...

2022-02-10 12:41:59 1645 5

原创 (Qt)QJson解析和生成

例子分析:代码:Json文件{ "SkinColorConfig": { "text_color_type_1": "224,231,250,255", "text_color_type_2": "162, 171, 195,255", "m_bubblewin_border_color": "48, 54, 66, 255", "m_bubblewin_line_color":"54, 63, 82, 255" }}解析代码: //将一

2021-12-13 14:29:27 14

原创 (Qt项视图Demo)封装下链式结构(QListView)的MVC(MVD)用法

对于一些数据量小的列表我们使用QListWidget往往能满足开发的需求,但是对于大数据量的展示来说(几十万,上百万)来说的话,全部加载是一个不是很合适的方法。因此我们使用MVC,这里可能应该叫MVD(model,view,delegation)。这样做个人认为有两个好处:1.效率问题,view和delegation配合只负责从model中取显示需要的数据,因此带来高效。2.model的数据可以由不同view来显示。这里的话封装下通用QListView的通用方法(Tree和Table之后做),去

2021-11-24 10:34:46 1920

转载 (Qt)Qt之show()、hide()、close()、exec()、open()比较

来源:Qt 之 show,hide,setVisible,setHidden,close 等小结_1+1=10-CSDN博客 Qt之show()、hide()、close()、exec()、open()比较_毅修的专栏-CSDN博客(1)QWidget 的show()、hide()、setVisible()、setHidden() 这4个函数让人看得眼花缭乱,但是打开源代码一看,原来最终调用的只是一个函数:setVisible(bool visible)。下面是几个函数的源代码。...

2021-11-12 11:23:34 5002

原创 (Qt)重写QApplication的Notify()进行一些事件的提前处理

软件中有一些窗口通常需要统一管理,这个时候可以利用重写Application来用Notify进行统一管理,比如菜单的一些,切换应用程序整体消失的属性。#include "CBillfishApplication.h"#include "CAppSingleton.h"#include <QMouseEvent>#include <QWidget>#include <QEvent>#include <QCursor>#include <Q

2021-07-29 13:44:09 1477

原创 (Qt)正确清晰的显示SVG图案到Label中显示以及Painter画清晰的SVG

ui肯定会给一个svg图案给你,可能很小,但是由于是svg你必须要在软件中显示清晰,无论多大。下面我就给一个实际的例子。 //文件夹设置固定默认图片 //取文件夹图片 QString folder_icon_path = GetSkinResourceAbsolutePath("tree_folder_blue_close.svg"); QSvgRenderer svg_remder (folder_icon_path); ...

2021-07-08 13:30:51 4542 2

原创 更新Win系统中断exe显示映像丢失错误

2021.5.25中午重装系统升级中,强制关机,导致系统软件错误,显示映像丢失。试了如下三个方法:1.向注册表注册所有系统文件for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1该情况无效。2.扫描sfc /scannowWindows操作系统的CMD命令有多种,sfc /scannow是使用率较高的一直,用于扫描和校对当前系统文件,修复缺失/异常的系统文件。如果检测到受保护的系统文件被不正确的文件覆盖会从dllca.

2021-05-25 16:01:15 148

原创 (QT)托盘客户端的处理方案

主要用到了Qt-QSystemTrayIcon这个类//头文件QSystemTrayIcon* m_lpTrayIco;//cpp QMenu* m = new CTrayMenu/*new QMenu*/; //绑定菜单 QAction* s = new QAction(QString::fromWCharArray(L"显示/隐藏"), this); QAction* a = new QAction(QString::fromWCharArray(L"关

2021-04-12 10:45:14 247

原创 Windows获取电脑的硬盘属性(转速,类型(HDD,SSD))

获取电脑的硬盘属性(转速,类型(HDD,SSD))参考的是老外技术论坛网站:https://stackoverflow.com/questions/23363115/detecting-ssd-in-windows头文件.h#pragma once#include <QString>#include <windows.h>#include <string>//==============判断磁盘格式--获取到的是磁盘格式void BuryPoin

2020-12-15 11:55:00 1643

原创 Qt-DPI测试

首先,DPI问题基本不和屏幕分辨率有关,分辨率再大4k,8k只要在1080p下开发,拿到大屏只不过会看上去小而已,不存在其他问题。DPI问题只和系统显示设置里的更改文本应用等项目大小有关,一般说的程序DPI适应,是适应这个东西。然后一般做法有两个一。一个是我看斗鱼软件那种适应系统DPI那样,DPI设的再高软件看上去没变化那种,稍微模糊。 qrc加个资源文件 qt.conf,具体百度吧。二。另一个比如Eager,DPI设高软件要等比例放大,显得好看这种。我们项目决定用这种。所有...

2020-09-26 17:22:05 658 1

原创 Qt弹窗的合理解决方案

大型项目肯定是有多种弹窗类型,无论是dialog还是原始的widget。我们在需要的时候显示,然后在进行他的其他任何操作的时候(就是点弹窗外的其他区域)将他关闭,这里有两种方法。一. popup设置窗口属性 setWindowFlags(Qt::Popup);二.窗口激活属性WindowDeactivate...

2020-09-26 17:08:42 1204

转载 (转载)Qt适应dpi的解决方案

转载自:https://blog.csdn.net/startl/article/details/105862817QT这个地方真应该好好规整一下,规划设计的太乱了,开发者真的无所适从先说最终解决方案:使用资源qrc里添加,qt/etc/qt.conf,qt.conf中WindowsArguments=dpiawareness=0好处就是直接让windows来控制,和多数程序保持一致。如果采用QT本身的方案,显示效果比较好,但是有不少坑:比如你在代码里写死了的一些间距,就会出问题,...

2020-09-26 08:48:19 2266

转载 (转载)vs下活动解决方案管理器中x86 x64 win32 anycpu arm的区别

https://blog.csdn.net/jigetage/article/details/80533910一 、x86、x64、Any CPU的区别参考文章点击打开链接1.简单的说,它们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的。以此类推,x64对应的则是64位的。而Any CPU则是取决于当前的操作系统,若操作系统是32位的,则编译出来的程序就是32位的,反之编译出来的就是64位程序。2.若你的启动项目,即主程序(编译出来是exe..

2020-09-22 16:47:07 866

原创 VSCode配置C++环境

之前的环境都是在Win下的VisualStdio或者QtCreator作为ide开发c++,这次试了下VSCode,讲一下配置。跟着这篇博客设置了下https://www.cnblogs.com/bpf-1024/p/11597000.html,但是还有问题。一.下载VSCode,有官网。二.安装VSCode里插件 最左边扩展------>搜索c++--------------->安装三.下载MinGW ,并将bin写入环境变量,打开cmd 输入gcc -v测试下。...

2020-08-26 15:41:28 329

原创 Muduo(C++11版本) 源码剖析(六)———TcpServer和Acceptor设计

TcpServer主要功能是管理新的连接到来时创建的TcpConnection,是直接提供给用户使用的类,生命周期由用户控制。Acceptor是创建在TcpServer内部的指针,内部会有一个Channel来专门处理新连接到来事件,新连接到来会回调给TcpServer的newconnection来创建新连接,其实之前几期内部的机制都算是讲完了,如果能够理解,这两个类基本看下就能知道作用了。TcpServer成员变量: private: EventLoop*

2020-08-17 16:18:26 546

原创 Muduo(C++11版本) 源码剖析(五)———TcpConnection设计

Rt

2020-08-17 14:51:55 512

原创 Muduo(C++11版本) 源码剖析(四)———Channel设计

RT

2020-08-15 13:52:28 38082

原创 Muduo(C++11版本) 源码剖析(三)———EventLoop设计

1

2020-08-14 18:17:13 1251

原创 Muduo(C++11版本) 源码剖析(二)———EventLoopThread+EventLoopThreadPool设计

213

2020-08-14 10:17:37 1113 1

转载 [转载]加密算法(DES,AES,RSA,MD5,SHA1,Base64)比较和项目应用

加密技术通常分为两大类:"对称式"和"非对称式"。对称性加密算法:对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。非对称算法:非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需

2020-08-03 10:44:19 172

原创 c++线程的一些理解

目前多线程方面我会用两种:Qt的QThread和std::thread,都是跨平台,封装了系统的线程库。 之后有必要会去了解Windows的thread和Linux的pthread。线程同步方面主要使用互斥锁mutex和条件变量condition_variable,没有用到一定需要用信号量的场景且互斥锁效率不一定比读写锁差,所以所有项目我都只用互斥锁和条件变量基本都能实现需求。互斥锁:保证临界区代码同时只能被一个线程访问。最常用的同步方式。有一些注意的地方Winodows下,锁在同一个线程.

2020-07-30 11:03:14 510

原创 C++RAII(资源即初始化)个人理解

Bjarne Stroustrup在书中提到"使用局部对象管理资源的技术通常称为“资源获取就是初始化”。这种通用技术依赖于构造函数和析构函数的性质以及它们与异常处理的交互作用"。其实我用到这个的东西不多,总是自信自己能在合适的时候将资源及时释放,但是项目越来越大,难免会有遗漏,所以当要获取一项资源的时候可以将该资源和类绑定,即和对象的生命周期绑定,用构造获取资源,用析构释放资源,可以用到文件,socket,锁上面。事实上,日常常规做法已经有很多RAII的例子了,比如string,智能指针和lock_gu

2020-07-16 14:52:47 240

原创 (Qt)封装下串口类QSerialPort的线程操作

串口基类-使用时请继承该类 -在子类业务逻辑,不要直接扩展该类。原则上读操作应该放入同一个线程,写操作也要放入同一个线程。这里读操作(read)和写操作(打开,关闭,write)不放在一个线程里这里因为我需要方便获取串口打开判断返回值所以打开放到主线程里,而且一般情况下写数据量不是很大,所以这里所有的写操作放到主线程,读操作处理包常规放到次线程里。如果串口读量很大,可以将所有操作放入线程里,比如用该类发信号进入线程,但是打开之类的返回值需要在异步中,通过信号通知合适对象是否打开成功。头文件.h..

2020-07-16 14:06:07 1719

原创 (C++)矩阵模板类

急忙忙,接了个单子写了个矩阵模板类,测了下int型没问题,之后再完善,还有个卷积运算没看懂懒得做,其他应该都做好了。#pragma once#include <iostream>#include <string>#include <vector>#include "..\utils\FileOperation.h"#include "..\utils\Utils.h"#include <sstream>using namespace std

2020-07-15 09:13:45 1245

原创 QT项视图类(QTableWidget,QListWidget,QTreeWidget)

QTableWidget刚用QT的操作:int casewidth = ui.case_Table-&gt;width(); ui.case_Table-&gt;setColumnWidth(0, (2.0 / 10.0)*casewidth); ui.case_Table-&gt;setColumnWidth(1, (2.5 / 10.0)*casewidth); ...

2020-07-13 15:40:39 335 1

空空如也

空空如也

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

TA关注的人

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