- 博客(562)
- 资源 (15)
- 收藏
- 关注
转载 QT QByteArray 的用法
另外,QByteArray 确保 size() 位置的字节始终为 '\0',这样就可以使用 data() 和 constData() 的返回值 作为期望以 '\0' 结尾的字符串的函数的参数。尽管 size() 为 5,但字节数组在末尾还保留了一个额外的 '\0' 字节,因此如果请求指向底层数据的指针(例如调用 data()),则指向的数据保证以 '\0' 结尾。size() 函数总是返回整个数组的大小,包括嵌入的 '\0' 字节,但不包括 QByteArray 添加的终止 '\0'。
2024-07-25 14:13:57
529
转载 QT读写配置ini文件
一、概述Qt中常见的配置文件为(.ini)文件,其中ini是Initialization File的缩写,即初始化文件。Qt中使用类来完成读写ini文件的操作。
2024-07-25 11:15:27
480
转载 单线程读 单线程写一个变量是否一定要加锁
不存在对a读一半或写一半的问题。可能又有新的疑问,这样且不是说对a的操作是原子了,那样的话何必还需要原子变量的类型了,而且对a的操作也不是一条指令能完成的啊。保证了原子性后还有一个可见性问题,写线程改变了变量的值读线程不一定能够立马读到改变后的值,但是如果我们可以接受这种延时读取完全可以不做任何额外的处理(比如我们一个值表示当前的池子中的水位,我们写线程加水后把表示水位的值改变为新的状态我们读线程取水,这次取不到可以下次取),当然这个问题也可以通过voliate关键字来解决,最暴力的手段当然还是加锁。
2024-06-26 18:01:16
587
原创 ps 抠图生成png
2、如果是纯色底图,使用魔棒工具选择,否则使用快速选择工具,选择图形背景。3、反选使用ctrl + shift + i。1、解锁图层,添加新图层,老的图取消眼睛。5、ctrl+j生成新图层。
2024-06-25 20:28:38
430
转载 QT使用QLabel控件显示图片,报错:QPixmap::scaled: Pixmap is a null pixmap
Label 和 pushButton 两个控件 实现点击 按钮 标签显示图片的功能Widget.cpp 同级目录img中有图片 1.png但是点击后报错:QPixmap::scaled: Pixmap is a null pixmap 在网上看了很多帖子:经过多方面尝试最后发现是图片格式的问题解决方案:先用QFile把文件的内容全部读取出来,然后再用loadData()来加载数据。猜测可能原因:内存对齐后,用load函数载入的时候都是按照32位深度来载入。
2024-05-08 17:30:07
848
转载 C++ 内存池介绍与经典内存池的实现
内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请内存,这样做的缺点在于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。
2024-05-08 10:32:01
1030
转载 SetThreadAffinityMask用途
是线程的前一个亲缘性屏蔽。例如,可能有一个包含4个线程的进程,它们在拥有4个CPU的计算机上运行。如果这些线程中的一个线程正在执行非常重要的操作,而你想增加某个CPU始终可供它使用的可能性,为此你对其他3个线程进行了限制,使它们不能在CPU 0上运行,而只能在CPU 1、2和3上运行。该函数中的 hThread 参数用于指明要限制哪个线程, dwThreadAffinityMask用于指明该线程。//线程1,2,3只能在cpu 1,2,3上运行。//线程0只能在cpu 0上运行。
2024-05-07 16:24:23
260
转载 c++多线程编程中的原子操作InterlockedIncrement和InterlockedDecrement用法详解
在这个修改后的示例中,通过使用InterlockedIncrement和InterlockedDecrement函数,将计数器的递增和递减操作改为原子操作,确保了对共享变量的安全访问,避免了竞态条件和数据竞争的发生。在上面的示例中,多个线程同时对计数器进行递增和递减操作,由于counter++和counter--不是原子操作,可能会导致竞态条件和数据竞争的发生,从而导致计数器的最终值不确定。在多线程编程中,除了原子操作外,还需要考虑其他同步机制,如互斥锁、条件变量等,以确保程序的正确性和性能。
2024-05-07 16:08:52
436
转载 完成端口 UDP GetQueuedCompletionStatus 异常处理
分析原因:Work线程GetQueuedCompletionStatus出错后直接countinue跳到下一次循环,没有投递数据接收请求,则GetQueuedCompletionStatus取不到数据接收结果,陷入阻塞,于是数据收发也都停下了。重新调整,在GetQueuedCompletionStatus出错后用WSARecvFrom 投递接收请求,再执行countinue,运行验证,GetQueuedCompletionStatus再出错时程序可以继续保持与其他客户端的通信了。
2024-05-07 14:15:00
251
转载 原子操作InterlockedExchange系列
操作,则ThreadA它就可以退出while循环,然后获取资源,并且,它对g_fResourceInUse设置为TURE,其它线程(假使ThreadC)如要使用,则将如刚才ThreadA般等待。可以用InterlockedExChange来实现循环锁的功能,所谓循环锁,就是在线程1中如果要对变量进行操作,要先查看这个变量(或资源)有没有被其它线程用到,如果是,则一直循环,则到其它线程放弃对该变量(或资源)的控制。不用其他互斥量,只为提升效率)//Access the resource. //获取资源。
2024-05-07 10:14:42
132
转载 VC++线程池1
在一般的设计中,当需要一个线程时,就创建一个,但是当线程过多时可能会影响系统的整体效率,这个性能的下降主要体现在:当线程过多时在线程间来回切换需要花费时间,而频繁的创建和销毁线程也需要花费额外的机器指令,同时在某些时候极少数线程可能就可以处理大量,比如http服务器可能只需要几个线程就可以处理用户发出的http请求,毕竟相对于用户需要长时间来阅读网页来说,CPU只是找到对应位置的页面返回即可。之后当指定的时间片到达,就会将对应的回调历程放入到队列中,一旦线程池中有空闲的线程就执行它。
2024-04-30 17:19:54
96
转载 Visual Studio 2017 编译配置Boost库
最后,看到“链接器”常规 > 附加库目录,增加"E:\boost_1_69_0\boost_1_69_0\stage\lib"看到 "C\C++" 常规 > 附加包含目录,增加"E:\boost_1_69_0\boost_1_69_0"因为上面选择的是以动态链接库的形式编译的boost库,所以这里要选择 多线程调试 DLL(/MDd)。下面的两个操作,需要你将上面boost编译的时候告诉你的目录替换到下面说的有关目录信息里面去。注意:一定要进行这样正确的设置,否则编译使用boost的程序总是会提示有问题。
2024-02-19 11:19:47
427
转载 Qt提升绘制效率,绘制加速。
通过以上两个场景,得出结论,不管是绘制多个或者逻辑复杂的静态图形还是绘制多个动态图形时,都可以通过生成图片的形式来提升绘制效率。:我们绘制多个静态图形和绘制一张图片哪个更快。很明显绘制多个图形的时候要慢很多。所以我们将多个图形变成一张图片就能实现加速。:绘制多个动态图形和将多个动态图形变成多张图片,效率还会有提升吗?在我们绘制一些复杂逻辑且数据量巨大的图形时,经常会出现。成一张图片,我们可以控制图片生成速度来减少cpu。问题,本文就是来进行讲解如何提升绘制效率的。控制图片生成速度后,cpu明显降低。
2024-01-22 15:41:57
1315
转载 设计模式——设计模式三大分类以及六大原则
通俗的讲,一个类对自己需要耦合的类应该知道的最少,你内部多么复杂和我没关系,我只对你提供的public方法感兴趣。这样的话,如果一个系统符合迪米特法则,那么当其中某一个类发生修改时,就会尽量少地影响其他模块,降低系统的耦合度,使类与类之间保持松散的耦合关系。比如在Activity中存在网络请求的逻辑,导致Activity过于臃肿,导致引起这个Activity变化的原因太多,这样就违反了单一职责原则,不利于后续的版本维护。这种设计也充分说明了,类与类不应该直接依赖细节,因为这样会导致耦合,限制了可扩展性,
2024-01-15 16:37:59
1457
1
转载 23种设计模式都适用于哪些场景?
根据对设计模式的学习,总结出各类设计模式的使用场景,了解哪些场景下适合使用哪种设计模式来解决该场景的问题,这样才能学而致用,仅仅了解设计模式但不能实践那学了又有什么用呢?22.模板方法模式:sitmesh,tiles,freemarker就是类似装饰模式,只不过如同模板一般,只需要关注变动的地方即可。20.状态模式:针对对象切换,将状态封装成对象,通过切换状态来用不同状态对象实现相同方法。7.桥接模式:开发时,jdbc,需要增加桥对象,可切换对接对象,实现不同桥功能。23.访问者模式:利用多态特性。
2024-01-15 14:53:21
404
转载 恢复-还原
4、之后再打开“系统属性”(步骤:桌面上,右键计算机--属性,打开系统属性,点击左侧“高级系统设置”),切换到“系统保护”选项下,选择禁用系统还原就行了。3、原始系统默认情况下,C盘作为系统还原存储盘并打开此功能,所以我们必须将他关掉,以节省C盘空间,在此,我们点击“配置”按钮。3、进入策略编辑窗口后,设置为“已禁用”或者“未配置”,点击确定即可,同样对“关闭配置”进行同样的操作。7、然后在“还原设置”区域,点选“关闭系统保护”按钮,再点击“应用”按钮。5、在弹出的“系统保护”对话框中,点击“继续”按钮。
2023-10-12 17:24:08
844
转载 Q_UNUSED()函数的作用
上面程序中,这个程序的主要功能是重构paint函数,我们看到了在这个函数的最开始,存在两处Q_UNUSED(),这两处的功能是防止编译器发出警告,警告option与widget两个变量没有调用,当加入这个函数时,编译器就不会再产生warning告警,避免编译时候警告过多。Q_UNUSED()函数在程序中的作用,就如它所代表的英文一样,unused,即无用的意思。即Q_UNUSED()函数在程序中没有实质性的作用,用来避免。以上就是Q_UNUSED()函数的介绍,只要见过一次,这个函数就不会在产生疑惑。
2023-10-07 10:49:45
506
转载 cmd查看局域网所有IP信息 arp -a(ARP命令介绍)
a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来bai显示ARP缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。其具体的用法就是先用arp -s ***.***.***.***(此为IP地址) **-**-**-**-**-**(此为MAC地址)绑定一条记录,然后用arp -a查询arp记录添加是否成功。(注:如果想要彻底的清空ARP列表,则需要禁止所有的网络连接,否则在网络交互过程中仍然会产生新的ARP列表。
2023-09-04 15:44:35
16249
1
转载 通过CMD命令连接ftp服务器 下载和上传文件
5.输入"prompt"命令(打开交互模式),最后输入"mget 服务其上要下载的文件名",回车键.这样就可以进行下载了.看到"Transfer complete"就表示下载成功了.到本地路径下就能看到下载的文件了.3.登陆成功后.输入"cd"命令.会显示"远程目录",输入"dir"命令会显示目录下的文件,权限等相关信息.可以通过"cd 文件名"命令进入到要下载的文件目录下.然后输入"ls"命令 显示文件夹下的所有文件.首先你要保证本地有要上传的文件,然后进入你要传到哪个目录下,是用PUT即可上传。
2023-09-04 11:39:43
4831
转载 netstat 命令详解
套接字是和 IP 地址、软件端口和协议结合起来使用的,而端口号对传输控制协议(TCP)和用户数据报协议(UDP)协议都适用,TCP 和 UDP 都可以使用 0 到 65535 之间的端口号进行通信。使用原始 IP 数据包来确定网络上可用的主机,这些主机的服务(包括应用程序名称和版本)、主机运行的操作系统(包括操作系统版本等信息)、正在使用的数据包过滤器或防火墙的类型,以及很多其它信息。输出的信息,但它可以比其它工具显示更多的 TCP 信息和状态信息。文件可以查看到更多关于保留端口的信息。
2023-09-01 16:03:11
3393
转载 Android Studio创建虚拟机AVD时出现HAXM未安装的问题
2.安装之后此项勾选,且安装信息中提醒HAXM install successfully,但创建AVD之后在AVD上运行依然报上面的错误,此时找到Android安装目录下的Android SDK目录,在Android SDK - extras - intel -Hardware_Accelerated_Execution_Manager-2中找到HAXM的安装程序。安装的时候可以点击show details查看安装信息,可以看HAXM是否安装成功,安装失败时也可以从中找出失败的原因。
2023-08-23 19:50:29
4043
3
转载 “Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy settings
遇到这种错误提示“Connection timed out: connect. If you are behind an HTTP proxy, please configure the proxy settings either in IDE or Gradle.”如果这些都不行,那很明显就是你的build.gradle的 repositories信息配置没有采用国内镜像下载失败。还有就是SDK Location的配置信息一定要对。
2023-08-23 19:46:10
2449
转载 C#命令行编辑器csc.exe
显式的列出各个导入文件来编译C#文件: csc /r:System.Windows.Forms.dll TestApp.cs HelloMsg.cs。*.dll文件的情况下),或者与包含程序的Main()方法的那个类型的名字相同(生成*.exe文件的情况下)- 使用通配符(*)通知csc.exe: csc /r:System.Windows.Forms.dll *.cs。- C#响应文件包含了在当前构建的编译期间要用到的所有指令,通常约定,响应文件的扩展名为*.rsp。
2023-08-23 19:32:58
653
转载 QWidget::setLayout: Attempting to set QLayout ““ on MainWindow ““, which already has a layout
然而在QWidget中调用QWidget的组件的时候就不会存在,直接调用setlayout就可以了。关于在Qmainwindow中添加Qwidget的时候会出现以上错误,解决办法。创建一个QWidget,将控件放入到widget,在调用。setCentralWidget(widget)函数。
2023-07-03 09:34:38
898
原创 windows下如何快速搜索文件内容
Windows提供find/findstr类似命令,其中findstr要比find功能更多一些,可以/?安装git,使用linux命令 grep 这里不再多说。windows版本的命令。
2023-04-07 09:47:17
739
转载 Qt如何解决自定义的QWidget子类添加到父类后StyleSheet失效问题
设置属性 this->setAttribute(Qt::WA_StyledBackground, true);改成继承QFrame,因为QFrame自带paintEvent函数已做了实现,在使用样式表时会进行解析和绘制。重新实现QWidget的paintEvent函数时,使用QStylePainter绘制。界面上再放widget控件。
2023-03-27 18:36:21
896
转载 C/C++ union 使用教程
而C语言本身就提供了一个类似的东西。float y;u.x = 114;u.y = 5.14;输出1145.14实际上就是两个变量共用同一块内存。如果是多个变量的话,union的大小就为最大的那一个变量。float y;double z;int main()当然,我们也可以union里面放个结构体。里面的结构体是需要满足内存对齐的。
2023-03-24 16:39:33
704
转载 CPU的字节序——大端小端模式详解
是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
2023-03-24 16:12:24
2391
转载 Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.
问题:AndroidGradle需要java11,你当前的使用的java8,编译不过
2022-11-17 22:10:04
15948
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人