自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(302)
  • 收藏
  • 关注

原创 std::bind

std::bind是函数模板(是一个函数);使用std::bind可以将可调用对象和参数一起绑定,绑定后的结果使用std::function进行保存,并延迟调用到任何我们需要的时候。std::bind返回一个基于f的函数对象,其参数被绑定到args上。f的参数要么被绑定到值,要么被绑定到placeholders(占位符,如_1, _2, ..., _n)。即;可将std::bind函数看作一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。std:

2022-02-24 11:22:26 37120

原创 qt 编译运行步骤

先qmake。 由.pro文件生成Makefile文件,makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模 块及库等). 再构建。 构建[mingw32-make、moc、uic等]是增量编译,只编译有变动部分,同时生成.exe,还有许多.o目标文件; 最后运行。如果有改动则根据已有的Makefile...

2019-05-16 17:07:28 12693 1

原创 虚拟机 Ubuntu安装gcc和g++

默认安装Ubuntu是没有带gcc和g++的,需要自己安装。首先需要知道root的密码,方法为在普通用户的客户端下:sudo passwd root ,重新设置root密码,因为Ubuntu刚安装时不知道root的密码的,所以需重置。 使用su 切换到root登录使用终端。 Ubuntu 是使用apt 该命令下载安装程序的,该过程需要联网。用apt install gcc 和apt in...

2019-05-12 10:36:03 11184

原创 qt QTreeWidget 学习

/ 设置列标题为 "Name" 和 "Value"void itemChanged(QTreeWidgetItem * item, int column) //条目列的数据发生变化,比如文本或图标修改了。// 创建一个子节点。void itemDoubleClicked(QTreeWidgetItem * item, int column) //条目列被双击。void itemActivated(QTreeWidgetItem * item, int column) //条目列被激活。

2024-04-25 14:46:32 682

原创 qt 信号槽

使用某对象时,用指针指向另一个对象的函数,这个函数就称为回调函数。3、Qt::QueuedConnection:信号发出后,信号会暂时被放到一个消息队列中,需等到接收对象所属线程的事件循环取得控制权时才取得该信号,然后执行和信号关联的槽函数,这种方式既可以在同一线程内传递消息也可以。观察者模式,激发信号的Qt对象无须知道是哪个对象的哪个槽函数需要接收它发出的信号,它只需要做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道哪个对象的哪个槽接收了信号。

2024-04-19 14:20:55 775

原创 qt 元对象系统及属性系统

type:连接类型;invokeMethod为信号槽而生,你可以指定连接类型,如果被调用的对象和发起调用的线程是同一线程,那么可以使用Qt::DirectConnection、Qt::AutoConnection、Qt::QueuedConnection,如果被调用对象在另一个线程,那么建议使用Qt::QueuedConnection;(4)函数qobject_cast(): 对于Object及其子类对象,可以使用函数qobject_cast()进行动态类型转换,此处可以理解为c++中的强制类型转换。

2024-04-17 15:10:59 851

原创 Qt使用插件QPluginLoader 机制开发

在这种情况下,插件可以提供任意功能,不限于数据库驱动程序、图像格式、文本编解码器、样式以及扩展Qt功能的其他类型的插件。这个宏第一次参数定义了一个uuid,保证唯一即可,第二个json是必须要有的,当无法找到指定的文件时,moc 会出现错误,即使是空的文件也行。如果 QPluginLoader 的其他实例正在使用相同的插件,则调用将失败,并且只有在每个实例都调用了 unload() 时才会发生卸载。一种高级API,用于为Qt本身编写插件:自定义数据库驱动程序,图像格式,文本编解码器,自定义样式等。

2024-04-08 11:16:52 1125

原创 qtxlsx 学习

QXlsx是一个可以读写Excel文件的库。不依赖office以及wps组件,可以在Qt5支持的任何平台上使用。

2024-03-27 13:53:45 893

原创 linux sh脚本编写

使用source script.sh方式,在当前上下文中执行脚本,不会生成新的进程,执行完毕,回到当前shell。if 条件语句的双分支结构由 if、then、else、fi 关键词组成,它进行一次条件匹配判断, 如果与条件匹配,则去执行相应的预设命令;if 条件语句的多分支结构由if、then、else、elif、fi 关键词组成,它进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令。当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。

2024-03-22 11:36:45 1064

原创 qt QProcess学习

terminate(),区别于 kill() 这种暴力的退出不同,它在退出进程的时候是有机会提示用户输入任何为保存的文件等。进程的输出通道与QProcess的读取通道相对应,⽽进程的输⼊通道与QProcess的写⼊通道相对应。这是因为我们使⽤QProcess读取的内容是进程的输出,⽽我们编写的内容则成为进程的输⼊。调⽤start()函数或open()函数启动进程。以分离的方式启动外部程序,外部程序与主程序互不干扰,外部进程的父进程是。的方式启动外部程序,外部进程与主程序互不干扰,但外部进程的父进程就是。

2024-03-21 08:45:09 1032

原创 qt Qt Remote Object(QtRO)实现进程间通信

功能提供节点(可以理解为服务器)需要使用QRemoteObjectHost将一个提供实际功能的QObject派生类注册进QtRO网络中,然后其他使用该功能的程序则通过各自的QRemoteObjectNode连接到该Host上,然后acquire一个该功能对象的Replica。host 不能直接访问当前连接的 node,服务端是所有已连接的 node 共享的,如果 host-source 发信号,那么所有连接的 node 都会收到这个信号。Signal方法是通过使用rep文件中的SIGNAL关键字创建的。

2024-03-20 10:21:47 1031

原创 c# 多线程创建及线程同步

BeginInvoke倒数第二个参数(MethodCompleted)是回调方法委托类型,他是回调方法的委托,此委托没有返回值,有一个IAsyncResult类型的参数,当method方法执行完后,系统会自动调用MethodCompleted方法。ManualResetEvent:在调用 `Set` 方法后,所有等待线程都会被唤醒并继续执行,直到显式调用 `Reset` 方法将 ManualResetEvent 设置回无信号状态为止。即每次调用 `Set` 方法会唤醒所有等待线程。

2024-03-08 09:15:23 952

原创 c# 任务(Task)以及异步 await(等待) 、Async(异步)

Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然也可以基本业务需要的多线程场景,但它们在多个线程的等待处理方面、资源占用方面、线程延续和阻塞方面、线程的取消方面等都显得比较笨拙,ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。Task.WhenAny(tasks.ToArray()).ContinueWith(x => Console.WriteLine("某个Task执行完毕"));

2024-02-29 10:54:02 1403

原创 c#委托、lambda、事件

2.注册有多个方法的委托想要开启新线程去执行委托,可以通过action.GetInvocationList()获取到所有的委托,然后循环,每个方法执行的时候可以BeginInvoke。(还是在同一线程执行)会开启一个新的线程去执行委托,注册有多个方法的委托,不能使用BeginInvoke。3.使用多播委托的时候可能会遇到一个问题,就是委托链的第一个方法报错了,导致后面的注册的方法都无法调用。匿名方法的意义在于:快速方便的实例化委托,不用定义具体的方法来关联委托,就是临时定义个方法(处理逻辑)与委托相关联。

2024-02-28 14:04:56 1166

原创 c# using 用法

using+别名=包括详细命名空间信息的具体类型,这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。,当然并不是所有的类都适用,只有实现了IDisposable接口的类才可以使用。的,在一定的范围内有效,出了这个范围时,自动。

2024-02-27 08:59:09 505

原创 c# 异常处理

代码中 catch 块的计算顺序为从上到下,但针对引发的每个异常,仅执行一个 catch 块。如果没有 catch 块指定匹配的异常类,则将选择不具有类型的 catch 块(如果语句中存在)。默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。应用程序异常一般可以预测,比如文件对象找不到啦,值不在范围内啦,数据类型不一致等等,设计,处理逻辑可以判断的。:用于检查发生的异常,并帮助发送任何可能的异常。

2024-02-26 13:42:48 1121

原创 c# 非托管资源的释放(析构函数、Dispose)

调用了Dispose方法。每一个类库固然能够提供各自释放资源的方法,好比close()、release()、clear()等等。使用using 语句语句,在一定的范围内有效,除了这个范围时,自动调用IDisposable的。所以在自定义的类,并且继承IDisposable接口的时候,重写虚函数Dispose,并且还为实现了IDispose接口的类提供了using释放资源的语法糖。调用的是微软类库或者第三方类库,通常类库会提供释放的方法,即约定为。并且新建带参数的Dispose函数,在该函数实现释放资源。

2024-02-26 09:17:50 473

原创 c# 类、接口、抽象类

2、函数调用out参数量,必须把它当作尚未赋值(即可以把已赋值的变量当作out参数,但存储在该变量中的值在方法执行时会丢失);口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法。方法1:声明数组类型的参数,添加 params 关键字,就可以使用任意数量的 int 参数调用该方法。3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)表示向方法传递一个值类型,避免复制值的开销,同时又不想在方法内改变值。

2024-02-23 11:27:59 908

原创 c#常用的数据结构及LINQ语法

数据结构 类型及备注 插入和删除 查找Array 顺序存储的线性表、定长 不支持(这里的插入与删除指会更改表长的行为) O(N)LinkedList 链式存储的线性表、不定长 O(1) O(N)List 顺序存储的线性表、不定长、动态扩容 O(N),结尾则是O(1) O(N)Stack 栈、不定长、动态扩容 O(1) 只能访问栈顶Queue 队列、不定长、动态扩容 O(1) 只能访问队列头部。

2024-02-22 09:07:04 1496

原创 Pcap通信

bytes是u_char类型的指针,指向数据包的实际内容。5. 兼容性:winpcap兼容libpcap,可以使用libpcap的应用程序在Windows平台下运行,但是libpcap不兼容winpcap,不能使用winpcap的应用程序在Linux平台下运行。除去4个字节的FCS,因此,抓包时就是60字节。来发送数据包,注意,第三个参数如果非零,那么发送将是同步的,这将站用很大的CPU资源,因为发生在内核驱动的同步发送是通过"brute force"loops的,但是一般情况下能够精确到微秒。

2024-01-26 10:58:41 922

原创 NSIS 安装windows 安装包(包括QT和MFC)

Function<函数名>FunctionEn用户自定义函数仅当是Call指令调用时才被执行。

2024-01-09 09:27:10 1116

原创 Qt在linux系统上使用技巧

QT在生成动态库时,会默认生成(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)四个文件。其中,(.so.1.0.0)为实际的动态库文件,(.so)、(.so.1)、(.so.1.0)均为软链接,都是指向(.so.1.0.0)的链接文件,为了版本控制。直接通过绝对路径和相对路径指定库的完整path(需后缀,.lib,.a, .so都适用),相对路径用$$pwd前缀,路径不允许空格。可以用-L指定目录,-l指定库的名称(无需后缀,.lib,.a, .so都适用,这样就不用区分到底是哪种)

2024-01-08 16:38:21 1127

原创 c++ uml时序图

可以清晰地表示交互的先后顺序与时序关系,而流程图注重过程的控制流程,可以描述每个步骤的执行方式以及处理逻辑。时序图中参与交互的实体只有两类,即角色(Actor)和对象(Object)与时序关系,流程图则是针对一个过程或者活动进行全面而细致的展开。之间的复杂关系,流程图通常描述单一对象的各种操作和转换过程。通过描述对象之间发送消息的。显示多个对象之间的动态协作。重点是明确好角色和对象。

2023-09-06 10:06:44 346

原创 C++日志系统log4cxx

(记录器),(输出源)和(布局)。可以简单理解为日志类别,要输出的地方,输出形式。Logger创建LoggerLogger是有一个String类的名字识别的,且大小写敏感。root logger是所有logger的祖先,是一直存在的, 通过Logger.getRootLogger()获得,并且不能通过名字获得。public static Logger Logger.getLogger(String name) 获得或者创建一个Logger。

2023-07-21 10:52:46 486

原创 vs、c++环境下开发使用com组件

COM组件是一组接口的集合,由Win32动态链接库(DLL)或可执行文件(EXE)的形式发布的可执行二进制代码组成。com是独立于语言的组件体系结构,可以用C++、Java和VB等任意一种语言编写com对象。COM组件的优点有:通过接口对功能分类;功能扩充,只需添加接口就行;可轻松实现进程间调用、分布式调用;具有封装、继承、多态的面向对象特征。COM是规范,以该规范实现的DLL可视为COM组件。

2023-07-06 11:15:19 3929

原创 学习grpc

int b = 10;Run();return 0;protobuf对简单数据的赋值,简单数据直接采用set_xx()即可该xx为proto文件的定义消息上的变量//在proto定义的消息uint32Type=1;//类型stringPath=2;//路径type(Type);path对应获取变量为直接是。

2023-07-06 10:55:55 233

原创 Qt数据类型转换

/按照Utf-8编码转换,可以转换中文。或者strOWPName = QString(QLatin1String(m_chOWPName));不包含中文的遇到中文默认转换为ascii码0x3f也就是字符’?第二种办法:使用静态函数fromUtf8 防止中文乱码,第二种办法:先转成标准库string,防止中文乱码。是本地操作系统设置的字符集编码,一般为GB2312.第一种办法:toUtf8 //防止中文乱码。

2023-06-27 19:32:31 904

原创 Qt 容器介绍

T必须是一个可赋值的类型,即提供一个缺省的构造函数、可拷贝构造函数、赋值运算符。其他的介绍可以参看:https://blog.csdn.net/baidu_16370559/article/details/123245803。QMultiHash相当于std::unordered_multimap 插入和查找时间复杂度都是o(1)QHash相当于std::unordered_map 插入和查找时间复杂度都是o(1)Qt容器对应STL容器,都是分为序列容器(顺序)容器、关联容器、散列(哈希)容器。

2023-06-27 19:03:47 821

原创 qt QDataWidgetMapper讲解

每次当前索引发生变化时,每个小部件都会通过映射时指定的属性使用来自模型的数据进行更新。默认情况下,每个小部件的用户属性用于在模型和小部件之间传输数据。/如果方向为水平,则使用模型第一行的数据填充小部件,否则使用第一列的数据。//按模型某行的数据映射到更新到部件,特别用于模型当前行改变时,发出的。//添加模型和部件的关联映射,section为模型某一列的序号。//将所有更改从映射的小部件提交到模型,用于。//所有未提交的更改都将丢失,用于。//得到当前模型的选中数据的行号。//删除小部件的映射。

2023-06-27 10:23:50 766

原创 qt QSqlRelationalTableModel 详解

用户接口层 用户接口层的几个类实现将数据库中的数据链接到窗口部件上,这些类是使用模型/视图框架实现的,他们是更高层次的抽象,主要包括QSqlQureyModel,QSqlRelationalTableModel为QSqlTableModel 的子类,为单张的数据库表提供了一个可编辑的数据模型,它。: 编辑一个数据表,将代码字段通过关系与代码表关联,将代码字段的编辑转换为直观的内容选择编辑。: 直接设置一个数据表的名称,可以获取数据表的全部记录,结果是可编辑的。主表的代码字段的序号。

2023-06-27 09:47:37 961

原创 Qt QSqlQueryModel详解

用户接口层 用户接口层的几个类实现将数据库中的数据链接到窗口部件上,这些类是使用模型/视图框架实现的,他们是更高层次的抽象,主要包括QSqlQureyModel,QSqlRelationalTableModel: 编辑一个数据表,将代码字段通过关系与代码表关联,将代码字段的编辑转换为直观的内容选择编辑。那如果想编辑修改,只能通过弹出一个对话框的,添加控件的方式进行修改,再结合。: 直接设置一个数据表的名称,可以获取数据表的全部记录,结果是可编辑的。//执行sql语句后,当前位置的结果,位置由。

2023-06-26 20:44:05 1905

原创 Qt QSqlTableModel详解

用户接口层 用户接口层的几个类实现将数据库中的数据链接到窗口部件上,这些类是使用模型/视图框架实现的,他们是更高层次的抽象,主要包括QSqlQureyModel,: 直接设置一个数据表的名称,可以获取数据表的全部记录,结果是可编辑的。直接设置一个数据表的名称,可以获取数据表的全部记录,结果是可编辑的。//设置记录数据的过滤条件,过滤的字符串实际上为sql语句where后的字段。//QModelIndex 类的data函数,从而得到某行某列的数据。//查询数据表的数据,并使用设置的排序和过滤。

2023-06-26 19:20:50 3487 1

原创 qt读写二进制文件

注意:必须调用setversion函数设置流版本号,读写流版本号相同,或者读高于写。//向文件流连续写入len个字节的数据,这个只写入数据,不写入数据大小到文件。缺点:也正是因为采用qt预定义的编码,其他编码语言不兼用。//适合于写入字符串数据,先写入字符串的长度到文件,再写入字符串到文件。特点:采用qt预定义的编码。

2023-06-26 08:46:45 3494

原创 qt读写文本文件

QIODevice::Text 0x0010 读的时候,文件结束标志位会被转为’\n’;写的时候,文件结束标志位会被转为本地编码的结束为,例如win32的结束位’\r\n’QIODevice::Truncate 0x0008 打开文件之前,此文件被截断,原来文件的所有数据会丢失。QIODevice::WriteOnly 0x0002 只写方式,如果文件不存在则会自动创建文件。QIODevice::Append 0x0004 此模式表明所有数据写入到文件尾。读:read、readall函数。

2023-06-23 16:21:42 1338

原创 Qt读写csv文件

一次性读取整个csv文件,先按换行符“\n”进行分割,再按分隔符“,”进行分割。实现复杂:相对于第一种实现方式,该方法需要处理编码问题和字节流转换问题,因此实现方式相对复杂一些。同时,该实现方式要求数据顺序不能改变,因为每行数据只存储在单独的QStringList中。readLine读取每行数据,再使用split进行分割,得到QStringList 数据。当数据量大的时候,使用该方法逐行写入文件,文件I/O开销相对较大,导致写入速度变慢。进行写操作,并写入分隔符“,”和换行符“\n”。

2023-06-23 15:11:04 3460

原创 qt读写xml文件

将整个 XML 文档读入内存,构建成一个树结构,允许程序在树结构上向前向后移动导航,这是与另外两种方式最大的区别,也就是允许实现多次解析器(对应于前面所说的一次解析器)。特别适合于实现一次解析器(所谓“一次解析器”,可以理解成我们只需读取文档一次,然后像一个遍历器从头到尾一次性处理 XML 文档,期间不会有反复的情况,也就是不会读完第一个标签,然后读第二个,读完第二个又返回去读第一个,这是不允许的);获取含有属性节点的属性。//获取根/子标签的标签名字,对应于createElement函数的参数。

2023-06-23 14:56:48 4127

原创 Qt连接Access数据库

SQL API层 对于SQL API 层提供了数据库的访问相关类,其中,QSqlDataBase类进行连接,QSqlQuery完成数据库的交互。用户接口层 用户接口层的几个类实现将数据库中的数据链接到窗口部件上,这些类是使用模型/视图框架实现的,他们是更高层次的抽象,主要包括QSqlQureyModel,QSqlTableModel and QSqlRelationalTableModel。QSqlTableModel : 直接设置一个数据表的名称,可以获取数据表的全部记录,结果是可编辑的。

2023-06-19 20:22:20 2511

原创 Qt调试详细日志文件输出

生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。恢复消息处理程序,调用qInstallMessageHandler(0)。那么在qt createor的应用程序输出窗口就不会有调试信息显示。包括等级、所在文件、所在行号、描述信息、产生时间。安装写在main()方法中,这样全局所有类的。都可以将信息直接打印到日志文件中。等函数输出信息重定向处理。qWarning:警告信息。,对qDebug()、回调函数处理日志信息,

2023-06-19 19:40:33 2028 2

原创 c# 入门学习

属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。相反,它们具有可读写或计算它们值的 访问器(accessors)。例如,有一个名为 Student 的类,带有 age、name 和 code 的私有域。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性.它们使用 访问器(accessors) 让私有域的值可被读写或操作。

2023-04-04 15:43:38 518 1

原创 使用vs code 编写c#程序

这里下载的是windows版本.NET 7.0 SDK 64位的。安装完成之后管理员权限运行 cmd 输入dotnet --version 如果输出版本号就是安装成功!b.解决方案管理器插件(vscode-solution-explorer)4.命令行单独利用 SDK 命令初始化工作空间并编译运行 C# 程序。3.下载安装 .NET Code SDK。a.中文包插件(chinese)c. C# 扩展插件(c#)1.下载安装vs code。

2023-04-03 11:43:18 7244 1

C++日志系统log4cxx

C++日志系统log4cxx

2024-01-09

qt QDataWidgetMapper讲解

qt QDataWidgetMapper讲解

2023-06-27

qt QSqlRelationalTableModel 详解

qt QSqlRelationalTableModel 详解

2023-06-27

Qt QSqlQueryModel详解

Qt QSqlQueryModel详解

2023-06-26

Qt QSqlTableModel详解

Qt QSqlTableModel详解

2023-06-26

空空如也

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

TA关注的人

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