c++
文章平均质量分 66
苏州-青蛙
>- -<
。
展开
-
QML基础学习(零散知识点,错误很能较多,自用)
QML基础学习原创 2023-02-02 15:39:54 · 256 阅读 · 0 评论 -
(Qt) Qt项目的插件化
笔者之前的项目所采用的是动态库的方式让程序运行时加载DLL,最近接触的几个项目均用插件化的方式加载程序所需要的模块。一开始我也纳闷,用我浅薄的理解Qt的插件化本质还是加载的dll,只不过是可以在运行期间进行dll的加载,无需加载lib,那么这样和存粹用动态库加载区别应该不大,一些动态库自带的好处比如解耦,灵活的好处,插件化也具备,那么这两个有什么不同呢,插件化是不是还能带来纯粹动态库没有的一些好处,下面就是我自己的角度想的好处。 插件支持热插拔使应用程序的使用更加灵活,软件只需要用到的时候加载插原创 2022-07-14 14:18:56 · 2093 阅读 · 0 评论 -
C++标准库关联容器之map,set基础用法
之前的文章介绍了顺序容器的一些用法:c++顺序容器用法这里主要记录下两个关联容器map和set的用法,同样会多引用C++ Primer中的原文这里只介绍前两个(map,set)的一些基础用法,后面几个可以根据业务情况自己学习用法。map是键值对,set只有键关键词唯一 关键词有序或者不保证有序插入/修改:Set声明-定义-初始化:插入:查询:删除:...原创 2022-07-07 13:57:24 · 429 阅读 · 0 评论 -
Qt项目中的日志库log4qt使用
Qt项目中的日志库log4qt使用原创 2022-06-20 15:28:26 · 962 阅读 · 0 评论 -
(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 · 5248 阅读 · 0 评论 -
Qt-DPI测试
首先,DPI问题基本不和屏幕分辨率有关,分辨率再大4k,8k只要在1080p下开发,拿到大屏只不过会看上去小而已,不存在其他问题。DPI问题只和系统显示设置里的更改文本应用等项目大小有关,一般说的程序DPI适应,是适应这个东西。然后一般做法有两个一。一个是我看斗鱼软件那种适应系统DPI那样,DPI设的再高软件看上去没变化那种,稍微模糊。 qrc加个资源文件 qt.conf,具体百度吧。二。另一个比如Eager,DPI设高软件要等比例放大,显得好看这种。我们项目决定用这种。所有...原创 2020-09-26 17:22:05 · 696 阅读 · 1 评论 -
(转载)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 · 1025 阅读 · 0 评论 -
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 · 346 阅读 · 0 评论 -
Muduo(C++11版本) 源码剖析(六)———TcpServer和Acceptor设计
TcpServer主要功能是管理新的连接到来时创建的TcpConnection,是直接提供给用户使用的类,生命周期由用户控制。Acceptor是创建在TcpServer内部的指针,内部会有一个Channel来专门处理新连接到来事件,新连接到来会回调给TcpServer的newconnection来创建新连接,其实之前几期内部的机制都算是讲完了,如果能够理解,这两个类基本看下就能知道作用了。TcpServer成员变量: private: EventLoop*原创 2020-08-17 16:18:26 · 612 阅读 · 0 评论 -
Muduo(C++11版本) 源码剖析(五)———TcpConnection设计
Rt原创 2020-08-17 14:51:55 · 568 阅读 · 0 评论 -
Muduo(C++11版本) 源码剖析(四)———Channel设计
RT原创 2020-08-15 13:52:28 · 38127 阅读 · 0 评论 -
Muduo(C++11版本) 源码剖析(三)———EventLoop设计
1原创 2020-08-14 18:17:13 · 1327 阅读 · 0 评论 -
Muduo(C++11版本) 源码剖析(二)———EventLoopThread+EventLoopThreadPool设计
213原创 2020-08-14 10:17:37 · 1160 阅读 · 1 评论 -
Muduo(C++11版本) 源码剖析(一)———总体架构
前言: 目前虽然一直是C++/Qt偏客户端的方向,但是研究了一段时间c++高性能服务器的一些架构设计,正好学习了一款flamingo这一款开源即时通讯软件,里面的网络层是用c++11改写的原来boost版的muduo,索性就写几篇博客分析下muduo这款网络库的源码,其实已经有不少人分析过该库,我在这里仅仅谈我的个人对该库设计、用法的一些理解 ,不对或者不准确的地方还请指出,有一些地方会直接引用陈硕老师的《c++linux多线程服务端编程》的原图或者原话。涉及到的关键类: ..原创 2020-08-13 15:27:24 · 3515 阅读 · 1 评论 -
c++线程的一些理解
目前多线程方面我会用两种:Qt的QThread和std::thread,都是跨平台,封装了系统的线程库。 之后有必要会去了解Windows的thread和Linux的pthread。线程同步方面主要使用互斥锁mutex和条件变量condition_variable,没有用到一定需要用信号量的场景且互斥锁效率不一定比读写锁差,所以所有项目我都只用互斥锁和条件变量基本都能实现需求。互斥锁:保证临界区代码同时只能被一个线程访问。最常用的同步方式。有一些注意的地方Winodows下,锁在同一个线程.原创 2020-07-30 11:03:14 · 539 阅读 · 0 评论 -
C++RAII(资源即初始化)个人理解
Bjarne Stroustrup在书中提到"使用局部对象管理资源的技术通常称为“资源获取就是初始化”。这种通用技术依赖于构造函数和析构函数的性质以及它们与异常处理的交互作用"。其实我用到这个的东西不多,总是自信自己能在合适的时候将资源及时释放,但是项目越来越大,难免会有遗漏,所以当要获取一项资源的时候可以将该资源和类绑定,即和对象的生命周期绑定,用构造获取资源,用析构释放资源,可以用到文件,socket,锁上面。事实上,日常常规做法已经有很多RAII的例子了,比如string,智能指针和lock_gu原创 2020-07-16 14:52:47 · 277 阅读 · 0 评论 -
C++11/14/17一些好用新特性自己整理下
慢慢写1.override原创 2020-07-08 15:07:13 · 556 阅读 · 0 评论 -
Windows网络库头文件包含问题
用WindowsApi做网络通信,windows.h和winsock2.h这两头文件位置不当经常报重定义。查了下别人博客,说的很详细。https://blog.csdn.net/pragma_g/article/details/83654187问题:彻底无语了,不小心某个文件包含了windows.h头文件,而windows.h文件里面包含着winsock.h文件,如果你下次使用winsock2.h文件时,位置不对,然后编译器会给你一大堆重定义错误问题。初级解决办法:把winsock2.h原创 2020-06-30 17:07:02 · 473 阅读 · 0 评论 -
头文件命名空间问题
做项目时,不小心在头文件加了using namespace xx。前置声明类,然后报错,虽然之前一直知道不能这么写,但还是想了解其原因,下面这篇博文写的很不错,部分引用他。https://blog.csdn.net/t11383/article/details/89035076在这里,我毫不回避地说了这句话:我再也不想在任何头文件中看到“using namespace xxx;”了作为一个开发者/团队领导者,我经常会去招聘新的项目成员,有时候也帮助其他组的人来面试应聘者。作为应聘流程之.原创 2020-06-30 14:50:53 · 368 阅读 · 0 评论 -
QTabWidget样式表设置问题
QTableWidget 去除上面标签for (int i = 0; i < ui.tabWidget->findChildren<QTabBar*>().size();i++) { ui.tabWidget->findChildren<QTabBar*>().at(i)->hide(); } //每...原创 2020-06-30 11:14:10 · 414 阅读 · 1 评论 -
VTK-VTK灰度图转为Qimage
int dim[3]; reader->GetOutput()->GetDimensions(dim); qDebug() << dim[0] << dim[1] << dim[2]; QImage m_image( dim[0], dim[...原创 2020-06-30 11:13:35 · 190 阅读 · 0 评论 -
2019.10.10重点记录文件加密以及QDataStream用法
今天要做别人一个文件加密的东西 一看很简单 但还是踩了不少的坑不说了 直接下面贴代码然后我解释 加密分两步 加密写入文件 和解密 获取信息中间用到关键的就是QDataStream,要设置版本号和大端和小端,然后写入的格式是4位的长度加数据你写 int << QString<<char 就是 int长度+int值 +QString长度+QString值+...原创 2020-06-30 10:34:06 · 390 阅读 · 0 评论 -
vtk&Qt 获取世界坐标和灰度值显示在状态栏
世界坐标 / 图片Spacing就是图片的像素坐标用到vtk&qt槽#include <vtkEventQtSlotConnect.h>//实现vtk的事件和QT槽函数的连接#include <vtkCommand.h>//vtk事件m_Connections = vtkEventQtSlotConnect::New();m_Connections-...原创 2020-06-29 17:15:13 · 329 阅读 · 0 评论 -
vtk对 camera 的操作方法如下
对 camera 的操作方法如下:vtkCamera *aCamera = vtkCamera::New();aCamera->SetViewUp (0, 0, -1);//设视角位置aCamera->SetPosition (0, 1, 0);//设观察对象位aCamera->SetFocalPoint (0, 0, 0);//设焦点aCamera->C...原创 2020-06-29 17:14:52 · 229 阅读 · 0 评论 -
(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 · 1371 阅读 · 0 评论 -
c++进制转换(std和顺序栈法)
1.顺序栈不多说,比较常用的方法。2.std的stringstream string str; getline(cin, str); //十六进制转十进制 int value; string hex_test = str; stringstream ss1; ss1.str(hex_test); ss1 >> hex >> value; //十进制转八进制 stringstream ss;...原创 2020-06-23 16:04:11 · 337 阅读 · 0 评论 -
将类运算符重载变为友元函数
自己在做项目遇到了这个问题,直接贴大佬的见解。转自:http://www.cppblog.com/zhenglinbo/archive/2011/12/18/162334.html?opt=admin运算符重载函数一般采用两种形式,一种是定义为类的成员函数,另一种是定义为类的友元函数。大多数情况下,使用成员函数和友元函数重载运算符在功能实现上是相同的,重载时如果没有本质的区别,则应该首先考虑使用成员函数以保证数据封装。然而在某些情况下,如C++不能直接进行复数加、减、乘、除的四则运算,但是使用友元转载 2020-06-22 16:02:54 · 918 阅读 · 0 评论 -
回调函数和Qt信号和槽小理解
Qt信号和槽用起来相当顺手,模块之间不需要互相传指针,直接下级模块instance(实例)在上级模块中连接信号和槽即可,但是在c++程序没有信号和槽的话,除非自己造轮子,弄个信号和槽机制,要么互传实例,互相调用,还有就是用回调函数。转自其他博客的一句话:既然我们需要模块间的协作,同时我们又厌恶的摒弃模块间你中有我我中有你的暧昧关系那如何生成系统呢,答案是函数指针(不一定一定是函数指针)也就是使用回调的方式。如果一个对象关心另一个对象的状态变化那么给状态的变化注册回调函数让它通知你这类状态的改变,这样原创 2020-06-18 10:38:56 · 1164 阅读 · 0 评论 -
服务端架构好文
本文将介绍我曾经做过的一个项目的服务器架构和服务器编程的一些重要细节。一、程序运行环境操作系统:centos 7.0编译器:gcc/g++ 4.8.3 cmake 2.8.11mysql数据库:5.5.47项目代码管理工具:VS2013一、程序结构该程序总共有17个线程,其中分为9个数据库工作线程D和一个日志线程L,6个普通工作线程W,一个主线程M。(以下会用这些字母来代指这些线程)(一)、数据库工作线程的用途9个数据库工作线程在线程启动之初,与mysql建立连...转载 2020-06-17 16:05:10 · 174 阅读 · 0 评论 -
应用层通信协议的问题
做了不少物联网通信上的模块,也看过了各种各样的协议解析,也学习了不少开源软件的网络交互方式,不谈那些http和其他一些封装好的处理方法,总认为tcp丢包或者包错了,那就会导致解析模块很容易卡住,比如长度位错了,你还要一直找协议头,始终找不到,群里大佬都说tcp丢包和错包不用考虑,那是硬件问题或系统问题,不要考虑。。。查了下资料tcp层有可能丢包,比如型号衰减或者网络阻塞等情况,但是这些情况与应用层无关,并且tcp有重传机制和其他安全性机制保证应用层意义上的包的连续性和完整性,所以从应用层协议的角度来原创 2020-06-10 17:27:16 · 225 阅读 · 0 评论 -
结构体位段
在做TCP传输的时候,有的时候数据头可能几种类型共用一个或多个字节,我们可以用结构体位段表示头字节的结构,而不用反复的位移操作。位段成员必须声明为int、unsigned int或signed int类型(short char long)。如下结构:struct bs { int a:8; int b:2; int c:6; }; 其中位域列表的形式为: 类型说明符 位域名:位域长度 下面有比较多的注意点,直接引用这篇大佬博客..原创 2020-06-09 16:39:27 · 352 阅读 · 0 评论 -
关于线程的虚假唤醒
最近用c++标准库写生产者消费者模式的线程操作队列,对一些代码感到疑惑。比如下面这个线程函数 中为什么要用 while (m_strSendBuf.empty()) 不直接用if判断,百度了一下果然这里存在一个比较常见的线程问题-虚假唤醒。void ClientSocketManager::SendThreadProc(){ while (!m_bStop) { std::unique_lock<std::mutex> guard(m_mtSendBuf...原创 2020-06-08 14:54:48 · 148 阅读 · 1 评论 -
QT服务端记次2020.6.1号遇到的问题
今天用Qt开发网络通讯的一个模块,之前有过不少次了,协议,收发线程解析全部弄好了,本以为很快就能弄完,但是在创建网络管理模块类用了饿汉单例,当时就是想线程安全性好点,但是忘了恶寒单例是在程序main函数之前就构造好的,之后由于主线程循环没有开启,线程之间发信号始终接受不到,这个问题找了半天才发现在QApplication之外构建好了,那就索性在加句函数初始化一下。用消息机制的readall 还是定时器的轮询socket都不失为读数据的好方法。线程之间的通信目前还是常用信号河槽,其次Qt开发之外用纯c++原创 2020-06-01 21:59:44 · 123 阅读 · 0 评论 -
mysql操作大全 转载
不选择Qt中自带的接口 我是直接从官方网站上下载了头文件 dll 和def 然后用def在vs命令行生成lib,再使用。原创 2020-06-11 10:25:37 · 108 阅读 · 0 评论 -
c++模板用法问题
在一个模板类中,构造函数和模板构造函数同时存在时,优先调用构造函数。只有当确切符合模板构造函数的接口时,才调用模板构造函数。编译器永远不会把模板构造函数视为构造函数,即使客户没有自己定义拷贝构造函数,编译器也会生成一个默认的拷贝构造函数。...原创 2020-06-11 10:26:12 · 170 阅读 · 0 评论 -
单例模式的线程安全性
随手写下,懒得上代码,给自己看。单例一般分两种 饿汉和懒汉 区别是在函数内new还是在类外new 。懒汉就是在函数内new是线程不安全的,两个线程创建的时候可能同时通过了指针==Null 这个判断,造出了2对象。饿汉在类外new 本身是线程安全的,不存在同时判断==NUll这个操作。懒汉用std::unique_lock<std::mutex> lock(m_Mutex)加锁可以保证线程安全。c++11函数内部的静态变量也能解决这个问题。...原创 2020-05-16 13:58:56 · 176 阅读 · 0 评论 -
visual stdio预编译头
可以自己添加 一般是stdafx.cpp 和stdafx.h 然后!!每个cpp都可以设置是否使用预编译头 右击属性就行,每个cpp的#include "stdafx.h"必须放在第一行!!!!原创 2020-06-11 10:26:29 · 93 阅读 · 0 评论 -
c++虚函数表问题(总结)+虚继承问题
c++实现多态的虚表和对象模型 是初级中级必须要知道的问题,每次我需要知道都会看一遍,有的时候也忘记。我索性做个总结,之后就希望忘了就在这里找,不看这块内容了。参考博客:https://blog.csdn.net/songguangfan/article/details/87898915一个类对象的内存布局成员的影响因素:1)成员变量2)虚函数(产生虚函数表)3)单一继承...转载 2020-05-12 13:28:13 · 937 阅读 · 0 评论 -
c++智能指针总结
2020.4.15 之前一直不愿意用智能指针,想法是因为现在项目不是足够大,认为没必要担心内存泄露的问题,自己控制好即可。这几天在认真拜读陈硕大佬的《c++多线程服务器编程》,认为是一本非常优秀的书籍,很适合我这种从初级往中级程序员发展突破“境界”所用。书里说了一些多线程的原理,c++多线程中使用智能指针是非常合适的,因为没有垃圾回收机制,在对象析构过程中多线程访问对象难免会出问题,不想自己重复造...原创 2020-06-29 17:06:33 · 248 阅读 · 0 评论 -
C++智能指针探索
1.unique_ptr介绍与auto_ptr相比unique_ptr有如下特点:1、 unique_ptr是一个独享所有权的智能指针,无法进行复制构造、赋值操作操作,只能进行移动操作。无法使两个unique_ptr指向同一个对象;2、unique_ptr智能指向一个对象,如果当它指向其他对象时,之前所指向的对象会被摧毁。3、unique_ptr对象会在它们自身被销毁时使用删除器自动删除它...原创 2020-06-30 10:30:59 · 67 阅读 · 0 评论