自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 QString、QLatin1String、QStringLiteral

但是,函数只接受QString参数的函数时,无论我们给一个字面字符串或QLatin1String,都会隐式构造一个临时的QString对象,构造这个对象需要在栈上申请一定的内存空间,然后把字符串拷贝过去,如果这样的调用比较多,那还是一笔不小的开销。它将字符串传递给函数时,宏在编译时,从字符串文字生成QString数据,QString的内部数据将在编译时生成,在运行时不会发生任何转换或内存分配,使用QStringLiteral来代替C++中的双重数值传递将会在编译的时候显著的提升时间。

2023-01-08 16:54:05 297

原创 Qt—QPainter基本图形绘制详解

1、QPainter 类在小部件和其他绘制设备上执行低级绘制。2、QPainter 提供了高度优化的功能来完成大多数图形GUI程序所需的工作。它可以画从简单的线条到复杂的形状。它还可以绘制对齐的文本和像素图。QPainter 可以对继承 QPaintDevice 类的任何对象进行操作。3、QPainter 与 QPaintDevice 和 QPaintEngine 类一起构成了Qt绘制系统的基础:QPainter 是用于执行绘图操作的类。QPaintDevice 表示可以使用 QPainter 在其上绘制的

2023-01-07 22:46:46 404

原创 QT部件透明阴影效果与不规则窗体

在页面布局中添加一个Label标签用来显示图片,应用程序大小设置成与图片大学校一致。方法,传入一个0~1之间的值来表示透明度;1表示不透明,0表示完全透明。在构造函数中初始化,通过setMask( )方法设置遮罩。重写printEvent( )方法,将图片绘制到应用程序上。之后设置窗体透明,部件不透明时就可以出现窗体班透明效果。将准备好的小黄人png图片添加到项目资源中。需要重写paintEvent( )方法。将窗体外形设置成小黄人形状。设置窗体透明,部件不透明。设置整个窗体透明,调用。

2023-01-06 11:26:11 424 3

原创 Qt—事件处理

Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等。Qt中,任何QObject子类示例都可以接收和处理事件。实际编程中通常实现部件的paintEvent()、mousePressEvent()等事件处理函数来处理特定部件的特定事件。每个程序的main函数最后都会调用QApplication类的exec()函数,它会使Qt应用程序进入到事件循环,使应用程序在运行的时候接收各种事件。

2023-01-06 11:15:23 284

原创 QT—QPalette调色板类

Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。

2023-01-06 11:03:55 257

原创 Qt样式表语法

使用样式表时,每个部件被看作拥有4个同心矩形的的盒子,四个矩形的内容分别为内容(content)、填衬(padding)、边框(border)、边距(margin)。此例中QPushButton#okButton代表的是单一对象,而不是一个类的所有实例,所以okButton的文本颜色会是灰色的。部件有效的样式表示通过部件的祖先样式表和QApplication上的样式表合并得到的,对于一些复杂的部件修改样式,可能需要访问它们的子部件,如QComboBox的下拉按钮,QSpinBox的向上、向下箭头灯。

2023-01-03 15:55:12 296

原创 QT—5种标准对话框使用详解

对话框是 GUI 程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。所谓标准对话框,是 Qt 内置的一系列对话框,用于简化开发。事实上,有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等。这些对话框在所有程序中几乎相同。Qt常用的内置对话框有QFileDialog、QColorDialog、QFontDialog、QInputDialog和QMessageBox。

2022-12-17 19:27:01 492

原创 QT—常用容器 QStringList,QVector,QMap,QHash,QVariant

QMap与QHash差别:①QHash比QMap查找速度更快。②QHash以任意顺序存储,QMap以Key顺序存储数据。③QHash的Key必须提供operator==()及一个全局的qHash(Key)函数,而QMap的Key必须提供operator

2022-12-15 09:35:04 339

原创 QT—QList与QLinkedList类的常用方法

QList维护了一个指针数组,数组元素指向每一个链表项,因此QList 提供了基于下标的快速访问。QLinkedList是一个链式列表,不能使用下标访问,与QList相比,当对一个很大的列表进行插入操作时,QLinkedList更高效。

2022-12-14 10:35:14 189

原创 QT—QString类

隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。隐式共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递的数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。数据相同时,执行浅拷贝,仅复制指向数据块的指针,数据不同时则执行深拷贝。隐式共享技术可以大大降低对内存的开销及CPU资源的消耗,很大程度提高应用程序的运行效率。QString类采用16位的Unicode值(两字节)保存数据,Unicode把所有语言都统一到一套编码里,Unicode提供、、

2022-12-13 16:04:37 222

原创 QT—常用窗口部件

QWidget类是所有部件对象的基类,被称为基础窗口部件,继承关系详看QWidget类关系图。QWidget提供自我绘制和处理用户输入等基本功能,如接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。一个没有父窗口部件的窗口部件一直是顶级窗口部件。非顶级窗口部件是父窗口的子部件。

2022-12-12 09:15:36 248

原创 QT对象树机制

Qt提供了对象树机制,能够自动、有效的组织和管理继承自QObject的Qt对象。每个继承自QObject类的对象通过它的对象链表(QObjectList)来管理子类对象,当用户创建一个子对象时,其对象链表相应更新子类对象信息,对象链表可通过children()获取。当父对象析构的时候,其对象链表中的所有(子)对象也会被析构,父对象会自动将其从父对象列表中删除。Qt 保证没有对象会被 delete 两次。开发中手动回收资源时建议使用deleteLater代替delete,因deleteLater多次是安全的,

2022-12-04 21:10:16 731

原创 Reg注册表读写

在Windows 95及其后继版本中,采用了一种叫做“注册表”的数据库来统一进行管理,将各种信息资源集中起来并存储各种配置信息。按照这一原则,Windows各版本中都采用了将应用程序和计算机系统全部配置信息容纳在一起的注册表,用来管理应用程序和文件的关联、硬件设备说明、状态属性以及各种状态信息和数据等。我们可以通过win+R,输入regedit 查看注册表编辑器。RegCreateKeyW( )函数 参数hKey打开的注册表句柄, 或是以下预定义键之一。要创建表项的名称,必须是hKey参数

2022-12-04 17:46:31 686

原创 Config配置文件读写

配置文件本质上是包含成功操作程序所需信息的文件,这些信息以特定方式构成。它们不是在程序中进行硬编码,而是用户可配置的,通常存储在纯文本文件中。

2022-12-01 22:53:51 260 1

原创 C语言文件操作

FILE为C语言提供的文件类型,它是一个结构体类型,用于存放文件的相关信息。文件打开成功时,对它作了内存分配和初始化。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

2022-12-01 22:26:27 487

原创 Win32API操作文件

在Windows编程中CreateFile函数是用得非常多的,不仅可以打开文件,还可以打开管道、邮槽、通信资源、磁盘设备(早期Windows),控制台、目录。该函数返回一个句柄,该句柄可用于根据文件或设备以及指定的标志和属性访问文件或设备以获取各种类型的I/O。

2022-12-01 21:31:41 369

原创 MFC文件操作

MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘输入输出功能。通过他的派生类可以间接的支持文本、文件、内存文件等。

2022-12-01 20:58:01 634

原创 动态链接库dll详解

使用动态库前要先将.dll文件加入到程序文件目录下第一种方法:在程序里添加#pragma comment(lib,"1124TDll.lib")代码第二种方法:将lib文件添加到附加依赖项中。两种方法选一种即可在需要用到的动态库函数用关键字extern声明。

2022-11-29 21:30:29 556

原创 进程的通信 - WM_COPYDATA

在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。其中使用向另一进程发送消息是一种比较经济实惠的方法。通信需要将传递的消息封装在结构体中,在消息传递函数时作为lParam参数传递为自定义数据,按照自己习惯设置就好,不影响对象的传输;表示传递数据的大小(以字节为单位表示传递的数据,是一个void*类型使用时要用而不能使用PostMessage,因为SendMessage是的,会等待消息响应窗体处理消息完毕后再返回;

2022-11-21 22:53:03 320

原创 进程的通信 - 命名管道

命名管道(Named Pipes),顾名思义,一个有名字的管道。命名管道的名字主要是用于确保多个进程访问同一个对象。命名管道不仅可以在同一台计算机之间传输数据,甚至能在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。

2022-11-20 22:27:24 188

原创 进程的通信 - 无(匿)名管道

匿名管道是一个没有名称的管道,本质上是一块共享的内存区域。匿名管道可以实现在。这里需要注意两点,第一就是在本地机器上,这是因为匿名管道不支持跨网络之间的两个进程之间的通信,第二就是实现的是父进程和子进程之间的通信,而不是任意的两个进程。匿名管道正是因为提供的功能很单一,所以他所需要的系统开销也就比命名管道小很多。然后顺便介绍一个匿名管道的另一种功能,其通过匿名管道可以实现子进程输出重定向。

2022-11-18 22:25:55 47 2

原创 进程的通信 - 邮槽

邮槽是Windows系统提供的一种单向进程间的通信机制。对于相对简短的地坪率信息发送,使用邮槽通常比命名管道或者Unix域套接字更简单使用邮槽通信的进程分为服务端和客户端。邮槽,在创建时需要指定邮槽名,创建后邮槽。在邮槽创建后,客户端可以通过邮槽名打开邮槽,在获得句柄后可以向邮槽写入消息。,只有服务端才能从邮槽中读取消息,客户端只能写入消息。消息先入先出。客户端先写入的消息在服务端先被读取。通过邮槽通信的数据可以是任意格式的,但是一条消息。邮槽除了在本机内进行进程间的通信外,在主机间也可以通信。

2022-11-17 21:04:56 351

原创 进程的通信 - 剪切板

因为剪贴板是所有进程都可以访问的,所以应用程序在使用这个剪贴板时,有可能已经有其他的应用程序把数据放置到了剪贴板上,因此该进程打开剪贴板之后,就需要调用 EmptyClipboard 函数来清空剪贴板,释放剪贴板中存放的数据的句柄,并将剪贴板的所有权分配给当前的进程,这样做之后当前打开这个剪贴板的程序就拥有了剪贴板的所有权,因此这个程序就可以往剪贴板上放置数据了。这个函数将清空剪贴板,并释放剪贴板中数据的句柄,然后将剪贴板的所有权分配给当前打开剪贴板的窗口。每个内存对象的内部数据结构包括最初为零的锁计数。

2022-11-16 23:04:12 257

原创 深入理解内核对象与函数句柄

Windows进程中除了内核对象还有其他类型的对象,比如窗口,菜单,字体等,这些属于用户对象和GDI对象。要区分内核对象与非内核对象,最简单的方式就是查看创建这个对象的函数,几乎所有创建内核对象的函数都有一个允许我们指定。内核对象A,B的引用计数减为0,被操作系统内核销毁,而进程1只减少自身对C,D的引用计数,不会影响进程2对C,D的引用计数,此时C,D引用计数不为0,不会被销毁。初次创建内核对象,使用计数为1。也就是说内核对象在当前进程中创建,但是当前进程退出时,内核对象有可能被另外一个进程访问。

2022-11-10 20:55:49 33

原创 线程同步之信号量

信号量的组成信号量()是操作系统用来解决并发中的互斥和同步问题的一种方法。与互斥量不同的地方是,它允许多个线程在,但是需要限制在同一时刻访问此资源的最大线程数目。信号量的工作原理以一个停车场为例,假设停车场只有三个车位,那么同一时刻最多只能有三辆车进入,还有其他车来时则必须在入口等待。只有当有一辆车离开停车场,才能允许其他车辆进入,如此往复。这个停车系统中,每辆车就好比一个线程,空车位数量就好比一个信号量,空车位数量限制了可以活动的线程。

2022-11-10 20:51:46 430

原创 线程同步的四种实现方式

这两种事件对象的区别在于当人工重置的事件对象得到通知时,等待该事件对象的所有线程均变为可调度线程;而当一个自动重置的事件对象得到通知时,等待该事件对象的线程中只有一个线程变为可调度线程。因为我们使用了事件对象。函数,以获得指定的临界区对象的所有权,该函数等待指定的临界区对象的所有权,如果该所有权赋予了调用线程,则该函数就返回;之后,其他想要获得该临界区对象所有权的线程就可以获得该所有权,从而进入关键代码段,访问保护的资源。函数释放该对象,该函数将释放一个没有被任何线程所拥有的临界区对象的所有资源。

2022-11-10 20:50:32 1033

原创 多线程+socket 实现群聊服务器

通过多线程+Socket,实现群聊服务器。服务端:每当有一个连接时,服务端起一个线程去维护;.将收到的信息转发给所有的客户端;当某个客户端断开连接时需要处理断开连接客户端:接收与发送信息断开连接自定义用户名

2022-11-06 20:25:07 425 2

原创 UDP套接字编程详解

UDP 是) 参考模型中一种无连接的协议。UDP协议与协议一样用于处理数据包。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无。UDP用来支持那些需要在之间传输数据的网络应用。包括系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。,UDP是最好的选择。

2022-11-05 20:22:30 875 1

原创 TCP套接字编程详解

为什么要称socket为套接字?首先套接字的原词为"socket",直译过来就是插座的意思,最先采用这个词的人,觉得网络连接,就像插口和插座一样,一方插,一方被插(知乎用户回答) 除此之外,linux等系统中“套接字”对应“socket word”,所以“字”也就是对应“word”,可能指计算机数据,也可能指存储socket的数据表示,因为端口号是两个字节,就是一个WORD。 至于为什么翻译为“套接字”:有人说是“套用-接口-标识”的意思;有人说是“套接起来的字符串”的意思;有人说“是将网络数据包一层一层

2022-10-29 18:32:32 1542 3

原创 QT部件基类——QWidget与QDialog

parent即父窗口,默认为0,即没有父窗口,是顶级窗口,如果指定parent值则当前窗体将会是一个子部件。Qt::WindowFlags是Qt::WindowType枚举值的组合,用来设置窗口的属性,f = 0表默认为Qt::Widget风格,其余窗口属性详见下表。也就是说若一些部件拉伸因子大于0,而一些部件拉伸因子为0,则只有拉伸因子大于0的部件会被拉伸,而拉伸因子为0的部件不会被拉伸。QWidget构造函数的默认值,如果新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件。

2022-09-22 16:31:52 945

原创 (C++)线程同步——互斥对象

临界资源是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息队列,变量,数组,缓冲区等。诸进程间采取互斥方式,实现对这种资源的共享。

2022-09-13 09:08:38 422

原创 (C/C++)线程基本概念、如何创建多线程

线程是在进程中产生的一个执行单元,是CPU调度和分配的最小单元,其在同一个进程中与其他线程并行运行,他们可以共享进程内的资源,比如内存、地址空间、打开的文件等等。是CPU调度和分派的基本单位,是分配资源的基本单位进程:正在运行的程序是处于执行期的程序以及它所管理的资源(如打开的文件、挂起的信号、进程状态、地址空间等等)的总称。

2022-09-12 10:32:38 222

原创 零基础入门MATLAB(一篇十分钟)

数组的定义是广义的,数组的元素可以是任意数据类型,例如可以是数值、字符串、指针等。每一个单元可以包括一个任意数组(如数值数组,字符串数组,结构体数组或另外一个单元数组),因此每一个单元的尺寸和内存占用空间可能不同。map是一种以“键值对”方式进行存储的容器,map的键(key)可以是数字也可以是字符串,map的数值就是map的数据(value)。字符串中的每个字符是数组中一个元素,字符串的存储要求每个字符8字节,之所以不要求1字节是因为对字符串保持同样的数据结果可以简化MATLAB的内部数据结构。

2022-09-10 20:53:45 1813 1

原创 QT—动态属性系统

调用动态属性写函数将属性赋值为“1000个”,属性值被更改就会发送了maskChanged信号,我们又在Widget程序中将一个槽方法与该信号连接,在槽方法中输出修改的属性值。一个属性可以使用常规函数QObject::property()和QObject::setProperty()进行读写,不用知道属性所在类的任何细节,除了属性的名字。可选,NOTIFY 后面跟该类中已经定义的一个信号函数,只要该属性的值发生更改,就会发出该信号。可选,FINAL表示属性不会被派生类覆盖,在某些情况下,这可用于性能优化。

2022-09-10 20:31:57 897

原创 QT—信号与槽详解

信号与槽(Signal & Slot)是编程的基础,也是 Qt 的一大创新。因为有了信号与槽的编程机制,在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。信号(Signal)就是在特定情况下被发射的事件,例如PushButton 最常见的信号就是鼠标单击时发射的 clicked() 信号。发射信号使用Qt的emit关键字QT 的 signals 关键字指出进入了信号声明区,随后即可声明自己的信号。定义信号,如:发射信号,如:槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的。

2022-09-10 17:04:41 1172

原创 模拟退火算法SA求解TSP问题

模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却。加温时,固体内部粒子随温升变为无序状,内能增大;而徐徐冷却时粒子渐趋有序,在每个温度上都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度时趋于平衡的概率为,其中为温度T时的内能,为其改变量。用固体退火模拟组合优化问题,将内能E模拟为目标函数值,温度演控制参数,即得到解组合优化问题的模拟退火算法:由初始解和控制参数初值。

2022-09-04 16:55:39 574

原创 模拟退火算法SA求解连续函数极值

(1)由一个产生函数从当前解产生-一个位 于解空间的新解:为便于后续的计算和接受,减少算法耗时,通常选择由当前解经过简单变换即可产生新解的方法。模拟退火算法求得的解与初始解状态(算法迭代的起点)无关,具有渐近收敛性,已在理论上被证明是一种以概率 1收敛于全局最优解的优化算法。Markov链长度是在等温条件下进行迭代优化的次数,其选取原则是在衰减参数T的衰减函数已选定的前提下,L应选得在控制参数的每一取值上都能恢复准平衡,一般L取100~ 1000.,系统接受此状态:否则,以一个随机的概率接受或丢弃此状态。

2022-09-04 16:55:35 188

原创 模拟退火算法SA求解多维连续函数极值

(1)由一个产生函数从当前解产生-一个位 于解空间的新解:为便于后续的计算和接受,减少算法耗时,通常选择由当前解经过简单变换即可产生新解的方法。模拟退火算法求得的解与初始解状态(算法迭代的起点)无关,具有渐近收敛性,已在理论上被证明是一种以概率 1收敛于全局最优解的优化算法。Markov链长度是在等温条件下进行迭代优化的次数,其选取原则是在衰减参数T的衰减函数已选定的前提下,L应选得在控制参数的每一取值上都能恢复准平衡,一般L取100~ 1000.,系统接受此状态:否则,以一个随机的概率接受或丢弃此状态。

2022-09-04 16:55:31 394

原创 禁忌搜索算法TS求解连续函数最值

局部邻域搜索是基于贪婪准则持续地在当前的邻域中进行搜索,虽然算法通用,易于实现,且容易理解,但其搜索性能完全依赖于邻域结构和初始解,尤其容易陷入局部极小值无法保证全局优化算法可以描述为:1)选定一个初始可行解:;记录当前最优解,,其中表示的邻域。2)当(空集),或满足其他停止运算准则是,输出计算结果,停止运算,否则,继续步骤3)3)从中选一个集合,得到中的最好解。若,则,;否则,,重复步骤2),继续搜索。

2022-09-04 15:34:48 181

原创 禁忌搜索算法TS求解TSP问题

局部邻域搜索是基于贪婪准则持续地在当前的邻域中进行搜索,虽然算法通用,易于实现,且容易理解,但其搜索性能完全依赖于邻域结构和初始解,尤其容易陷入局部极小值无法保证全局优化算法可以描述为:1)选定一个初始可行解:;记录当前最优解,,其中表示的邻域。2)当(空集),或满足其他停止运算准则是,输出计算结果,停止运算,否则,继续步骤3)3)从中选一个集合,得到中的最好解。若,则,;否则,,重复步骤2),继续搜索。

2022-09-04 15:34:45 607

C语言实现推箱子游戏素材

C语言实现推箱子游戏素材

2022-02-20

C语言实现推箱子游戏,素材+源码限时免费下载

C语言实心推箱子游戏,素材+源码限时免费下载

2022-02-17

C语言+MySQL实现推箱子游戏,从数据库链接到游戏打包,游戏素材以及源代码限时免费下载。

C语言+MySQL实现推箱子游戏,从数据库链接到游戏打包。游戏素材以及源代码下载

2022-02-17

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

TA关注的人

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