自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 40751

原创 qt 编译运行步骤

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

2019-05-16 17:07:28 13003 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 11332

原创 QTcpSocket 及QTcpServer 多线程使用

注意:如果你想处理在另一个线程一个新的QTcpSocket对象传入连接,您必须将socketDescriptor传递给其他线程,并创建了QTcpSocket对象存在并使用其setSocketDescriptor()方法。该函数会创建一个QTcpSocket,并设置套接字描述符为socketDescriptor,然后存储QTcpSocket在挂起连接的内部清单。接收函数:readAll、发送函数:write、关闭连接函数:close 都需要在子线程实现。重新实现这个函数来改变服务器的行为,当一个连接可用。

2024-09-03 15:21:06 775

原创 Qt WebSocket

3)保持连接状态:与 HTTP 不同的是,WebSocket 需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息;在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行。1)较少的控制开销:在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小;5)可以支持扩展:WebSocket 定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如: ws://example.com:80/some/path。

2024-08-26 17:01:02 1156

原创 学习minio

MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和。这就意味着 MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、 自由的去修改、自由的再次发行新的版本和软件. 确实, MinIO 强有力的支持和驱动了很多世界500强的企业。

2024-08-20 19:44:19 842

原创 linux服务 学习

etc/systemd/system/vsftpd.service.d/custom.conf:在 /etc/systemd/system 下面创建与配置文件相同文件名的目录,但是要加上 .d 的扩展名。/etc/systemd/system/目录下存放的是需要开机执行的服务,该目录下有大量的链接文件,链接到/usr/lib/systemd/system/目录下,该目录下的文件才是systemd实际启动的服务脚本文件。Upstart的配置文件存放在/etc/init/目录。

2024-08-20 19:30:30 816

原创 编译aws并访问minio

这里我使用的是cmake ../aws-sdk-cpp -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/root/software/aws/aws/install/ -DBUILD_ONLY="s3" -DENABLE_TESTING=OFF。/// 判断存储桶及相关连接是否有效。参看https://docs.aws.amazon.com/zh_cn/sdk-for-cpp/v1/developer-guide/setup-windows.html。

2024-08-14 16:14:40 1005

原创 cmake-gui

ZERO_CHECK是首先执行的构建目标,会检查生成出的VS项目相比CMakeLists.txt是否过期,如果过期会首先重新生成VS项目。首先,先将test.cpp编译成一个静态库,同时生成一个a.exe,再将静态库链接到a.exe内;项目源码写好之后,不同的平台,不同的编译器会根据CMakeLists.txt里的指令生成各自的项目文件,在Windows平台上,可以使用cmake-gui根据CMakeLists.txt里的指令,生成你电脑上安装好的Visual Studio项目。//test.h的内容。

2024-08-14 16:09:16 292

原创 c++编译、链接、构建

这样从cmake里就能看到源码编译的过程,也是上面我说的第二条,也能更好地理解编译的过程。project命令用于指定cmake工程的名称,实际上,它还可以指定cmake工程的版本号(VERSION关键字)、简短的描述(DESCRIPTION关键字)、主页URL(HOMEPAGE_URL关键字)和编译工程使用的语言(LANGUAGES关键字)在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。

2024-08-14 16:07:14 553

原创 windows系统下编译和使用grpc

把helloworld.proto、helloworld.pb.h、helloworld.pb.cc、helloworld.grpc.pb.h、helloworld.grpc.pb.cc添加到server项目中,同时greeter_server.cc的代码拷贝到main.cpp文件,并稍微改造一下。把该目录下的所依赖的库文件都通过https://github.com/grpc/grpc/tree/master/third_party下载并解压放到grpc/third_party。

2024-07-31 15:04:51 723

原创 linux编译grpc

一样要使用到protoc软件,则需要在环境变量PATH增加protoc软件所在的目录,同时由于protoc软件需要用到grpc的动态库,所以需要设置环境变量LD_LIBRARY_PATH,增加grpc动态库目录。自动加入所依赖的其他库的设置。protoc:解析proto文件并根据给定的选项生成输出,其命令格式是protoc [OPTION] PROTO_FILES,最后一项是待编译的proto文件的位置。--grpc_out:指定.grpc.pb.cc和.grpc.pb.h文件的输出目录。

2024-07-31 14:51:35 856

原创 使用vcpkg

它会将vcpkg的工具链路径添加到构建系统的配置中,使得构建系统能够在库搜索路径中找到vcpkg安装的库。自动设置链接和包含路径:在执行vcpkg integrate install命令后,vcpkg会自动将库的链接路径和头文件包含路径添加到项目的构建系统配置中。透明集成:一旦使用vcpkg integrate install命令将vcpkg与项目集成,开发人员就可以无需关心库的链接和包含路径的配置细节。该命令会将vcpkg工具链与项目的构建系统进行集成,以方便在项目中使用vcpkg安装的库。

2024-07-25 19:18:55 688

原创 qt中实现多语言功能

其中,location没有也可以,只是QT语言家打开.ts文件时定位不到字符串位置而已,主要还是source 元素和translation元素,source元素相当于字符串的id,翻译家通过source在lang_zh_CN.ts找中文文本,在lang_en.ts找英文文本。然后在Qt Creator中,使用:工具->外部->Qt预言家->部署翻译(lrelease),就会生成需要的qm文件或者在Linguist中点击文件->发布。生成qm文件之后,在main.cpp文件中添加下面的代码,加载qm文件。

2024-05-29 15:52:08 1181

原创 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 959

原创 qt 信号槽

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

2024-04-19 14:20:55 871

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

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

2024-04-17 15:10:59 1044

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

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

2024-04-08 11:16:52 1811 1

原创 qtxlsx 学习

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

2024-03-27 13:53:45 1787

原创 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 1850

原创 qt QProcess学习

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

2024-03-21 08:45:09 1301

原创 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 1515

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

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

2024-03-08 09:15:23 1075

原创 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 4144

原创 c#委托、lambda、事件

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

2024-02-28 14:04:56 1299

原创 c# using 用法

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

2024-02-27 08:59:09 537

原创 c# 异常处理

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

2024-02-26 13:42:48 1153

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

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

2024-02-26 09:17:50 773

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

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

2024-02-23 11:27:59 933

原创 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 1764

原创 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 1151

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

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

2024-01-09 09:27:10 1232

原创 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 1324

原创 c++ uml时序图

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

2023-09-06 10:06:44 522

原创 C++日志系统log4cxx

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

2023-07-21 10:52:46 699

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

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

2023-07-06 11:15:19 5333

原创 学习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 303

原创 Qt数据类型转换

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

2023-06-27 19:32:31 1344

原创 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 890

原创 qt QDataWidgetMapper讲解

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

2023-06-27 10:23:50 980

qt QTcpServer多线程

QTcpServer多线程 每个客户端连接的tcpSocket分别分配一个专门的线程来处理。 核心思想:继承并重写QTcpServer的incomingConnection函数去自己实现tcpsocket连接的建立和分配。 incomingConnection函数说明: 当QTcpServer有一个新的连接时这个虚函数被调用。该socketDescriptor参数是用于接受连接的本地套接字描述符。 该函数会创建一个QTcpSocket,并设置套接字描述符为socketDescriptor,然后存储QTcpSocket在挂起连接的内部清单。最后newConnection()被发射。 重新实现这个函数来改变服务器的行为,当一个连接可用。 注意:如果你想处理在另一个线程一个新的QTcpSocket对象传入连接,您必须将socketDescriptor传递给其他线程,并创建了QTcpSocket对象存在并使用其setSocketDescriptor()方法。

2024-09-03

Qt 插件QPluginLoader的使用例子

qt插件(Plug-in,又称addin),一种遵循一定规范的应用程序接口编写出来的程序.应用程序使用 QPluginLoader 检测和加载插件。在这种情况下,插件可以提供任意功能,不限于数据库驱动程序、图像格式、文本编解码器、样式以及扩展Qt功能的其他类型的插件. 面向Interface编程,内部封装,模块和整体流程开发分离,提高开发效率。 开发测试环境:QT5.15.2 + MSVC 2019.

2024-08-22

aws-sdk-cpp 1.11.370

amazon (S3) 是一个公开的服务,Web 应用程序开发人员可以使用它存储数字资产,包括图片、视频、音乐和文档。 S3 提供一个 RESTful API 以编程方式实现与该服务的交互MinIO是兼容AWS SDK,所以可以通过aws访问minio文件系统。 现在windows 64位系统上aws的c++版本已编译好的库,可直接拿来使用。使用的是VS2019

2024-08-15

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关注的人

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