自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Qt解析复杂的csv格式文件

如果内容中又有双引号,则会是2个双引号连在一起表示一个双引号。* 如果内容中包含换行符,则整个内容要以双引号括起来。* 如果内容中包含逗号,则整个内容要以双引号括起来。* 3. 某个列可能存在逗号、双引号、换行。* 每个字段的左右2边的空白字符可以忽略。* 2. 某个列的内容可能多行显示。* 每行内容是以换行符作为一行的。* 还有其他复杂的情况,暂时不考虑。/*csv格式是以逗号分隔列的。* 1. 逗号分隔列。

2024-07-18 11:30:21 397

原创 关于QEventLoop对象的创建与调用exec()不在同一个线程的问题

当start()启动后,在另一个新的线程中运行 m_loop.exec(),然后当调用stop()后发现m_loop.exec()运行并不会结束。本想调试跟踪源代码,但是没找到实现的原理。这样的情况下才能正确的退出exec()

2024-07-04 16:03:48 237

原创 基于Lua源码开发动态库供lua脚本使用

则使用时:MyFirstLua = require("MyFirstLua")比如有一个动态库名为:MyFirstLua.dll。导出的函数接口名称一定是 i。的方式将函数注册导出到。脚本中应该返回多少个值。的dll库,并且导出。代表这这个导出函数在。

2024-07-03 16:17:49 390

原创 package.cpath和package.path的作用,使用技巧

但是默认情况下package.path和package.cpath存储的路径通常是lua执行程序所在路径,且不一定能够找到socket.dll和redis.lua文件。所以为了方便管理,这个时候我们就需要将这2个文件所在的路径添加到package.path和package.cpath中。当我们需要在脚本中引入第三方库或者脚本文件时,比如 socket.dll和redis.lua文件,通常我们只需要执行。1. 需要require的是lua脚本时,需要把路径拼接到package.path中。

2024-07-03 15:45:26 331

原创 lua中判断2个表是否相等

其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度,而且还会出现奇怪的现象。例如:t里面有3个元素,但是因为最后一个下表是5和4,却表现出不一样的长度。当我们获取 table 长度的时候无论是使用。所以通常准确计算table的长度就是通过。

2024-07-02 17:25:53 427

原创 浮点数在内存中的存储结构

(左移得到的指数是正数,右移得到的是负数)单精度float占内存4字节,最高位bit31表示符号位,指数位bit23~bit30占用8个bit位,剩余的23个bit表示尾数。5. 将科学计数法表示的二进制数,从小数点后面第一位开始(因为小数点前面肯定是1,为了节省1bit,所以去掉),从。指数是11位bit,所以可以表示为0~2047,但是指数存在正数和负数,所以IEEE754规定,存入内存时E的。指数是8位bit,所以可以表示为0~255,但是指数存在正数和负数,所以IEEE754规定,存入内存时E的。

2024-07-02 11:38:19 869

原创 为什么char类型的范围是-128 ~ +127 浅析为什么char类型的范围是 —128~+127

1000 0000 和-128丢弃最高位后余下的8位相同,所以才可以用-0 表示-128。因为即使截断后的-128和char 型范围的其他数(-127~127)运算也不会影响结果。0111 1111,进而,补码为: 1 1000 0000,这是-128的补码。正数的反码和原码相同,负数的反码是原码除了符号位,其余为都取反。补码规定: 整数的补码是其本身,负数的补码为其反码加一。但是对于有符号整数,二进制的最高位表示正负。最高位为0时表示正数,为1时表示负数。无符号整数会用全部为来存储。

2024-06-27 20:26:26 1221

原创 c/c++提供lua接口的参数遍历

c、c++提供接口供lua脚本调用时,会涉及到参数的调用,那么在c、c++层是如何遍历参数的呢?

2024-01-25 18:16:22 390

原创 lua深度复制对象

【代码】lua深度复制对象。

2023-12-25 19:04:27 488

原创 Qt的qss通过动态属性来改变样式

第一种方式是将样式直接写到代码里面 ,虽然也可以通过配置文件的方式(比如json)来操作,但是很零散。第二种方式:动态增加属性,配置好所有状态的样式表并加载,然后通过修改属性的方式来实现。在实际应用中,会存在这样的需求:同一个按钮根据不同的逻辑显示不同的样式,比如,第二种和第三种方式可以将样式写到css文件中,比较友好,方便样式管理。第一种方式:每次修改逻辑时直接设置stylesheet即可。第三种方式:通过修改类的方式来实现动态切换样式。

2023-06-02 15:31:57 2226

原创 C#判断断网(不管后端还是客户端)

TCP有一个连接检测机制,就是如果在指定的时间内(一般为2个小时)没有数据传送,会给对端发送一个Keep-Alive数据报,使用的序列号是曾经发出的最后一个报文的最后一个字节的序列号,对端如果收到这个数据,回送一个TCP的ACK,确认这个字节已经收到,这样就知道此连接没有被断开。在Windows中,第一次探测是在最后一次数据发送的两个小时,然后每隔1秒探测一次,一共探测5次,如果5次都没有收到回应的话,就会断开这个连接。我们要搞清楚的就是inOptionValues的定义,在C++里它是一个结构体。

2023-03-29 22:18:07 1139

原创 QSharedMemory在linux下异常崩溃导致的bug

QSharedMemory在linux下异常崩溃导致的bug

2023-03-08 19:47:59 830

原创 Qt源码在32位arm上编译

qt在嵌入式arm上32位系统编译

2023-02-28 21:54:34 620 1

原创 lua中通过debug.sethook()动态跟踪脚本当前执行的情况,包括运行到哪行、哪个函数、哪个文件

lua debug.sethook debug.getinfo

2023-02-03 18:22:32 1328

原创 lua中json和table互转

lua中json和table互转

2023-02-03 18:14:03 3022 4

原创 lua中的逻辑运算

lua的逻辑运算

2023-02-02 17:34:12 437

原创 lua:字符串转table

lua中字符串转table

2023-01-29 09:16:36 1340

原创 lua:table转json字符串

lua中table转json字符串

2023-01-29 09:15:26 1553

原创 istreambuf_iterator和ostreambuf_iterator用法简单总结

istreambuf_iterator ostreambuf_iterator

2022-11-11 15:39:42 1959

原创 Qt的rcc资源,换肤或新皮肤发布

Qt换肤

2022-06-22 14:53:54 1117

原创 libevent实现UDP通信

因为libevent在底层上是没有直接支持udp通信,并且在Windows上,对于udp的iocp操作,libevent也不支持(实际Windows本身是支持IOCP实现UDP通信的)不过仍然可以利用libevent实现udp通信,调试源码发现,libevent是通过select模型去实现的。下面的例子实现了先绑定某个端口,当收到消息时,udpread_cb发生回调。如果不需要绑定端口,那么就需要先sendto后,才能够收到消息,udpread_cb才会发生回调。#include <

2022-04-19 21:22:11 2892

原创 libevent实现客户端

#include <string.h>#include <errno.h>#include <stdio.h>#include <signal.h>#ifdef _WIN32#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "event.lib")#pragma comment(lib, "event_extra.lib")#.

2022-04-19 15:29:07 781 1

原创 libevent服务端,多线程应用2

上文已经介绍过了,当Windows因为防火墙问题,可能导致evutil_socketpair失败,那么我们可以利用定时器的方式来添加新连接的用户,在一章中,修改如下libevent服务端,多线程应用#include <thread>#define CLIENT_THREAD_COUNT 2struct tagThreadContext{ std::thread thd; std::mutex mtx; std::unordered_set<evuti

2022-04-18 18:19:52 282

原创 libevent服务端,多线程应用

下面的方式是创建多个event_base来处理多线程的,主event_base用来处理连接请求,各个子event_base用来处理读写和关闭请求。另一种方式是,所有的连接、读写、断开操作,都在一个event_base里面,然后当读到数据时,放入到子线程中处理,处理完了后再写,不过此时需要读写加锁,参考下列代码中的client_register_cb(...)// TestServer.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <str.

2022-04-18 17:57:14 1203

原创 libevent服务端,单线程应用

libevent单线程的应用

2022-04-18 17:48:47 315

原创 Windows防火墙与TCP、UDP

当Windows防火墙开启的时候,可能导致一些TCP和UDP监听的端口无法接收到数据或者是数据无法发出去。此时就需要把监听的端口添加到Windows的入栈出栈规则里面。入栈和出栈是相对的,别人访问你,要入栈,你访问别人,叫出栈将端口添加到入栈中,这样比人就可以访问你:入栈输入以下命令netsh advfirewall firewall add rule name="你的名称" dir=in action=allow program="你的应用完整路径" enable=yes profile=

2022-04-01 15:32:16 5008

原创 QNetworkAccessManager的坑

在用Qt自带的QNetworkAccessManager做http请求时,碰到一些坑,比如在请求过程中,碰到断网后,即使再把网线连上,也无法请求,而且报错信息为:QNetworkReply::UnknownNetworkError "Network access is disabled."原因可以参考:https://blog.csdn.net/linkang1024/article/details/96306421大致就是说,断网了后,网络状态改变了,但是重新连网后状态并没有更正过来,所以htt

2022-04-01 15:00:53 1609

原创 QtCreator生成的exe添加管理员权限

Qtcreator生成的exe默认是不支持管理员权限的,就是生成的exe图标右下角有一个盾牌的标志,有2种方式可以实现,亲测通过。首先:新建 xxx.exe.manifest文件,名字随便取。内容如下:<?xml version='1.0' encoding='UTF-8' standalone='yes'?><assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> <tr

2022-04-01 14:49:15 1349 1

原创 windows上bug崩溃定位分析(Qt或者VS)

任何情况下,都不能保证自己写的代码不会发生崩溃,崩溃不可怕,可怕的是无法定位哪里崩溃,特别是客户那边崩溃,开发者这边不崩溃,问题陷入僵局。自从有了下面这个神奇的代码,再也不怕了。以下代码亲自测试没问题。1. 如果是在VC++中,那么只需要将下列2个文件直接添加到工程中.发布程序后,如果发生了崩溃,那么在崩溃的文件中就已经记录了“哪个文件的哪一行发生了崩溃”。再也不用像以前那样要在项目属性中配置,要生成.map、.cod等等文件,然后计算偏移地址来分析了。2. 如果是在Qt+MinG.

2022-03-16 21:30:32 4968 1

原创 Qt中搭建WebAssembly

Qt适合emsdk的版本,参考官网: Qt for WebAssembly | Qt 5.15【踩过的坑】1. Qt5.15.2的目录下已经包含了wasm编译所需要的库和环境,默认路径在 5.15.2/wasm_32下,但是wasm对应的emscripten版本是1.39.7,可以通过输入命令行(先cd到你的pro工程目录下)的方式来获取版本信息,所以你需要下载并安装emscripten1.39.7版本。下文有介绍安装方式。D:\Qt\Qt5.15.2\5.15.2\wasm_32\bin\q.

2022-01-29 09:52:12 6061 8

原创 qt插件开发一般步骤

qt插件开发一般步骤

2022-01-25 14:51:25 1023

原创 QTimer的一点点误区

对于Qt的信号槽,正常情况都能够发射和接收,但是对于QTimer,它有一个需要注意的地方就是:在子线程中(就是那个run函数里面,它是运行在子线程中的)创建QTimer,发现不起作用,这是因为QTimer是基于事件循环的,qtimer又是一个很特殊的东西,所以在run中,必须要进入qt的事件循环才有用,并且new的时候,还不能指定parent为this。但是在qthread的构造函数中,qtimer却是可以的,因为它也是在主线程中构造的么。定时器不起作用QThreadXXX::run()

2022-01-25 14:40:24 505

原创 Qt的D和Q指针

Qt的D指针和Q指针,实际上就是一个类的成员指针变量,改变量指向另一个Private类对象,这个Private类对象中包含了一系列的成员和函数。这样做的目的:1.可以对外隐藏数据内容。2. 防止改变类的数据模型,从而做到二进制兼容。Q_DECLARE_PUBLIC提供一个q_func q_ptr Q_Q,一般是在XXXPrivate类中使用,需要自己声明 XXX* q_ptrQ_DECLARE_PRIVATE提供一个d_func d_ptr Q_D,一般是在XXX类中使用,需要自己声明XXXPr

2022-01-25 14:27:49 1158

原创 std::result_of实现分组group by的功能

工作中,有时候需要对相同的条件进行分类,比如同名的,同年龄的。添加头文件#include <iostream>#include <string>#include <unordered_map>#include <vector>定义jie

2021-06-08 10:23:04 528

原创 QWidget派生的子类对样式表不起作用,而Qt自带的库却没问题

QWidget派生的子类在使用样式表的时候,发现不起作用,但是在使用qt的库时发现是起作用的。这是因为样式表的实现需要paintEvent中实现才起作用,而QWidget的paintEvent是空的。而从QWidget派生来的qt自带的组件中,都实现了paintEvent,所以样式表没问题。关于此问题,帮助文档中有提到过,需要如下实现:具体帮助文档在哪里我找到,不过我也看到了QStyle里面有提到过。同时也参考了另一篇博主:https://blog.csdn.net/nathan1101/a

2021-04-28 14:25:33 213

原创 Qt实现阴影边框,可拖动,可缩放窗口(三)

阴影这部分,采用的是具有阴影的图片和九宫格的方式来实现的,之所以采用九宫格,就是为了让窗口缩放时不出现失真的问题。#pragma once#include <QWidget>#include <QPaintEvent>#include <QPixmap>class CShadowWindow3 : public QWidget{ Q_OBJECTpublic: explicit CShadowWindow3(QWidget* pSh

2021-04-28 14:11:00 351

原创 Qt实现阴影边框,可拖动,可缩放窗口(二)

通过paintEvent来实现的,绘制方形的阴影没问题,但是绘制圆角阴影的话,发现圆角不够圆润,而且有断裂的感觉。#pragma once#include <QWidget>#include <QPaintEvent>class CShadowWindow2 : public QWidget{ Q_OBJECTpublic: explicit CShadowWindow2(QWidget* pShadowWidget,QWidget *paren

2021-04-28 12:34:26 301

原创 Qt实现阴影边框,可拖动,可缩放窗口(一)

通过QGraphicsDropShadowEffect来实现,主要思想就是:把无标题的透明窗体添加阴影后作为背景,然后把正常的窗体作为子窗口附加上去。#pragma once#include <QWidget>#include <QResizeEvent>class CShadowWindow : public QWidget{ Q_OBJECTpublic: explicit CShadowWindow(QWidget* pShadowWidg

2021-04-28 11:40:46 421

原创 c++中返回函数指针的函数

工作中,有时候,我们需要根据某个条件来返回一个函数来执行某个任务,那么这个时候可以想到使用函数指针,也可以返回一个function函数指针的例子经典的函数:void (*signal(int sig, void (*func)(int)))(int);http://www.cplusplus.com/reference/csignal/signal/?kw=signal分析:signal是一个函数,它有2个参数,一个参数是int类型,另一个参数是void(*)(int)函数指针,同时它返回...

2021-04-02 10:27:59 772

原创 decltype和declval的用法

1. decltype是c++11以后出现的一个新的关键字,是用来萃取表达式或者变量或者函数返回值的类型的。具体用法可以参考官网:https://en.cppreference.com/w/cpp/language/decltype2. declval是c++11中的一个模板函数,原型如下:具体用法可以参考官网:https://zh.cppreference.com/w/cpp/utility/declvaltemplate<classT>typenamestd::add_..

2021-03-31 18:19:21 837

空空如也

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

TA关注的人

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