- 博客(45)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 Qt解析复杂的csv格式文件
如果内容中又有双引号,则会是2个双引号连在一起表示一个双引号。* 如果内容中包含换行符,则整个内容要以双引号括起来。* 如果内容中包含逗号,则整个内容要以双引号括起来。* 3. 某个列可能存在逗号、双引号、换行。* 每个字段的左右2边的空白字符可以忽略。* 2. 某个列的内容可能多行显示。* 每行内容是以换行符作为一行的。* 还有其他复杂的情况,暂时不考虑。/*csv格式是以逗号分隔列的。* 1. 逗号分隔列。
2024-07-18 11:30:21 456
原创 关于QEventLoop对象的创建与调用exec()不在同一个线程的问题
当start()启动后,在另一个新的线程中运行 m_loop.exec(),然后当调用stop()后发现m_loop.exec()运行并不会结束。本想调试跟踪源代码,但是没找到实现的原理。这样的情况下才能正确的退出exec()
2024-07-04 16:03:48 255
原创 基于Lua源码开发动态库供lua脚本使用
则使用时:MyFirstLua = require("MyFirstLua")比如有一个动态库名为:MyFirstLua.dll。导出的函数接口名称一定是 i。的方式将函数注册导出到。脚本中应该返回多少个值。的dll库,并且导出。代表这这个导出函数在。
2024-07-03 16:17:49 417
原创 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 374
原创 lua中判断2个表是否相等
其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度,而且还会出现奇怪的现象。例如:t里面有3个元素,但是因为最后一个下表是5和4,却表现出不一样的长度。当我们获取 table 长度的时候无论是使用。所以通常准确计算table的长度就是通过。
2024-07-02 17:25:53 454
原创 浮点数在内存中的存储结构
(左移得到的指数是正数,右移得到的是负数)单精度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 891
原创 为什么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 1355
原创 Qt的qss通过动态属性来改变样式
第一种方式是将样式直接写到代码里面 ,虽然也可以通过配置文件的方式(比如json)来操作,但是很零散。第二种方式:动态增加属性,配置好所有状态的样式表并加载,然后通过修改属性的方式来实现。在实际应用中,会存在这样的需求:同一个按钮根据不同的逻辑显示不同的样式,比如,第二种和第三种方式可以将样式写到css文件中,比较友好,方便样式管理。第一种方式:每次修改逻辑时直接设置stylesheet即可。第三种方式:通过修改类的方式来实现动态切换样式。
2023-06-02 15:31:57 2434
原创 C#判断断网(不管后端还是客户端)
TCP有一个连接检测机制,就是如果在指定的时间内(一般为2个小时)没有数据传送,会给对端发送一个Keep-Alive数据报,使用的序列号是曾经发出的最后一个报文的最后一个字节的序列号,对端如果收到这个数据,回送一个TCP的ACK,确认这个字节已经收到,这样就知道此连接没有被断开。在Windows中,第一次探测是在最后一次数据发送的两个小时,然后每隔1秒探测一次,一共探测5次,如果5次都没有收到回应的话,就会断开这个连接。我们要搞清楚的就是inOptionValues的定义,在C++里它是一个结构体。
2023-03-29 22:18:07 1220
原创 lua中通过debug.sethook()动态跟踪脚本当前执行的情况,包括运行到哪行、哪个函数、哪个文件
lua debug.sethook debug.getinfo
2023-02-03 18:22:32 1389
原创 istreambuf_iterator和ostreambuf_iterator用法简单总结
istreambuf_iterator ostreambuf_iterator
2022-11-11 15:39:42 2038
原创 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 2988
原创 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 799 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 292
原创 libevent服务端,多线程应用
下面的方式是创建多个event_base来处理多线程的,主event_base用来处理连接请求,各个子event_base用来处理读写和关闭请求。另一种方式是,所有的连接、读写、断开操作,都在一个event_base里面,然后当读到数据时,放入到子线程中处理,处理完了后再写,不过此时需要读写加锁,参考下列代码中的client_register_cb(...)// TestServer.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <str.
2022-04-18 17:57:14 1237
原创 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 5071
原创 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 1709
原创 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 1410 1
原创 windows上bug崩溃定位分析(Qt或者VS)
任何情况下,都不能保证自己写的代码不会发生崩溃,崩溃不可怕,可怕的是无法定位哪里崩溃,特别是客户那边崩溃,开发者这边不崩溃,问题陷入僵局。自从有了下面这个神奇的代码,再也不怕了。以下代码亲自测试没问题。1. 如果是在VC++中,那么只需要将下列2个文件直接添加到工程中.发布程序后,如果发生了崩溃,那么在崩溃的文件中就已经记录了“哪个文件的哪一行发生了崩溃”。再也不用像以前那样要在项目属性中配置,要生成.map、.cod等等文件,然后计算偏移地址来分析了。2. 如果是在Qt+MinG.
2022-03-16 21:30:32 5137 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 6185 8
原创 QTimer的一点点误区
对于Qt的信号槽,正常情况都能够发射和接收,但是对于QTimer,它有一个需要注意的地方就是:在子线程中(就是那个run函数里面,它是运行在子线程中的)创建QTimer,发现不起作用,这是因为QTimer是基于事件循环的,qtimer又是一个很特殊的东西,所以在run中,必须要进入qt的事件循环才有用,并且new的时候,还不能指定parent为this。但是在qthread的构造函数中,qtimer却是可以的,因为它也是在主线程中构造的么。定时器不起作用QThreadXXX::run()
2022-01-25 14:40:24 534
原创 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 1181
原创 std::result_of实现分组group by的功能
工作中,有时候需要对相同的条件进行分类,比如同名的,同年龄的。添加头文件#include <iostream>#include <string>#include <unordered_map>#include <vector>定义jie
2021-06-08 10:23:04 549
原创 QWidget派生的子类对样式表不起作用,而Qt自带的库却没问题
QWidget派生的子类在使用样式表的时候,发现不起作用,但是在使用qt的库时发现是起作用的。这是因为样式表的实现需要paintEvent中实现才起作用,而QWidget的paintEvent是空的。而从QWidget派生来的qt自带的组件中,都实现了paintEvent,所以样式表没问题。关于此问题,帮助文档中有提到过,需要如下实现:具体帮助文档在哪里我找到,不过我也看到了QStyle里面有提到过。同时也参考了另一篇博主:https://blog.csdn.net/nathan1101/a
2021-04-28 14:25:33 221
原创 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 369
原创 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 309
原创 Qt实现阴影边框,可拖动,可缩放窗口(一)
通过QGraphicsDropShadowEffect来实现,主要思想就是:把无标题的透明窗体添加阴影后作为背景,然后把正常的窗体作为子窗口附加上去。#pragma once#include <QWidget>#include <QResizeEvent>class CShadowWindow : public QWidget{ Q_OBJECTpublic: explicit CShadowWindow(QWidget* pShadowWidg
2021-04-28 11:40:46 431
空空如也
Tuxedo调用tpcall失败
2015-07-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人