- 博客(94)
- 资源 (18)
- 问答 (3)
- 收藏
- 关注
原创 开源项目推荐:Qt有关的GitHub/Gitee开源项目(★精品收藏★)
Github上的一些高分Qt开源项目【多图】_bailutuo7403的博客-CSDN博客
2022-02-22 20:13:03
1639
转载 C/C++函数库
1. 分类函数: ctype.h int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否则返回0int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0int isascii(int ch) 若ch是字符(ASCII码中的0-127)返回非0值,否则返回0int iscntrl(int ch) 若ch是作废字符(0x7F)或普通控制字符(0x00-0x1F),返回非.
2022-01-25 16:05:13
393
转载 互联网协议入门
原文链接:互联网协议入门(一) - 阮一峰的网络日志我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?互联网的核心是一系列协议,总称为"互联网协议"(Internet Protocol Suite)。它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了互联网的原理。下面就是我的学习笔记。因为这些协议实在太复杂、太..
2021-11-26 19:17:04
252
原创 Qt常用事件汇总
一个事件由一个特定的 QEvent 子类来表示,但是有时一个事件又包含多个事件类型,比如鼠标事件又可以分为鼠标按下、双击和移动等多种操作。这些事件类型都由 QEvent 类的枚举型 QEvent::Type 来表示,其中包含了 一百多种事件类型,可以在 QEvent 类的帮助文档中查看。虽然 QEvent 的子类可以表示一个事件,但是却不能用来处理事件,那么应该怎样来处理一个事件呢?在 QCoreApplication 类的notify()函数的帮助文档处给出了5种处理事件的方法:方法一:重新实现部件的
2021-05-06 15:39:47
1383
转载 sqlite3:深入理解sqlite3_stmt 机制
我们在使用sqlite3的过程中,涉及到批量操作时(批量插入、批量读。。。),总会遇到 sqlite3_stmt这个数据类型,按照官方解释说法是这样的:sqlite3_stmt是C接口中“准备语句对象”,该对象是一条SQL语句的实例,而且该语句已经编译成二进制形式,可以直接进行计算。它并不是我们所熟悉的sql语句,而是一个已经把sql语句解析了的,用sqlite3自己标记记录的内部数据结构,可以被直接执行的语句,所以,如果结合变量,采用sqlite3_stmt结构,会使得批量操作执行的效率大大...
2021-04-02 16:26:34
1464
转载 视频编解码学习一 yuv格式
今天说下视频解码基础知识 众所周知,我们日常看到的视频都有各种各样的视频格式,mp4,flv,rmvb,mkv,wmv。。。这些视频是根据什么区分的,为什么会有这么多视频格式。 首先说下视频压缩,视频都是一帧一帧的图片组成,他们都是通过容器封装成各种各样的格式。人眼的视觉残留特性导致人眼的分辨率不能超过30帧每秒,那么我们也就没有必要按照视频最初采集的大小进行存储,否则存储消耗实在是太大,比如1080p电影15分钟经过YUV4:2:0格式下的数据量为1920 x 1028 x 12 x 2...
2021-04-02 14:37:43
1480
转载 视频和视频帧:视频和帧基础知识整理
写在前面从18年12月接手在基于x86平台的边缘计算设备上进行取流解码的工作至今,已有数月。笔者还记得当初对流媒体、视频、帧、图像等概念完全云里雾里,慢慢跟着项目一步步学习走过来,受益良多,以这篇文章励志作为后续继续学习的里程碑吧!本文将介绍的是:视频的基础知识。包括:视频协议和格式、视频流。 视频帧的基础知识。包括:YUV帧格式、常见的帧名词(帧率fps、分辨率、码率)、“奇怪”的帧名词(1080p和1080i)、视频编解码而衍生的帧名词(GOP、I\B\P帧)。修改记录2019年4月
2021-04-02 14:28:40
3065
原创 QLabel文字过长显示不全处理方法
1 让其自动换行 ui->label->adjushSize(); //自适应大小 ui->label->setWordWrap(true); //自动换行2 使用QFontMetrics::elidedText函数让文本显示省略号(省略号位置可以在文本开头/中间/末尾)函数原型:QString QFontMetrics::elidedText(const QString &text, Qt::TextElideMode mode, int...
2021-01-30 14:16:04
11351
2
原创 Lua IO库笔记
IO库提供了两套不同风格的文件处理接口。第一种风格为简单模式, 其使用隐式的文件句柄; 它提供设置默认输入文件已经默认输出文件的操作, 所有的输入输出操作都针对这些默认文件。第二种风格为完全模式,其使用显示的文件句柄当使用隐式句柄时, 所有的操作都由表IO提供,当使用显示文件句柄, io.open会返回文件句柄, 且所有的操作都由该文件句柄的方法来提供。表IO中也提供了三个和C中含义相同的预定义文件句柄:io.stdin、io.stdout、stderr. I/O库永远不会关闭这些文件简单模式在
2021-01-16 14:49:39
1045
原创 自定义QLineEdit支持文件拖拽显示文件路径
#pragma once#include <QtWidgets/Qwidget>#include <QLineEdit>#include <QDropEvent>#include <QMimeData>#include <QDragEnterEvent>class CustomLineEdit : public QLineEdit{ Q_OBJECTpublic: CustomLineEdit(QWidget *pare.
2021-01-16 10:29:20
1609
原创 C++虚函数和纯虚函数理解
虚函数:函数中带有关键字virtual纯虚函数:纯虚函数是在基类中申明为虚函数,它在基类中没有定义, 但是要求任何派生类都需要定义自己的实现方法,在基类的实现纯虚函数的方法是在函数原型后添加=0(virtual void funtion1()=0)虚函数的重载函数然然为虚函数, 在派生类中重定义虚函数时必须完全和基类完全相同。虚函数必须为类的成员函数,不能为全局函数,也不能为静态函数。不能将友员函数说明为虚函数,但是虚函数可以是另一个类的友员。虚构函数可以是虚函数,但是构造函数不能为虚函数。一般.
2020-12-29 19:34:57
491
原创 C++拷贝构造和赋值构造理解
C++一般创建对象 拷贝或者赋值的方式有:构造函数、拷贝构造函数、赋值函数。1 构造函数构造函数时一种特殊的成员函数, 是创建一个类的对象时,他被调用来对类的数据成员进行初始化和分配内存。C++的空类,编译器会加入默认的成员函数:默认构造函数和拷贝构造函数析构函数赋值函数(赋值运算符)取值函数即使程序没定义任何成员, 编译器也会插入以上函数--->构造函数可以重载, 可以多个 可以带参数。 析构函数只有一个2 拷贝构造函数拷贝构造函数是C++独有的, 他是一种特殊的构造函数
2020-12-29 19:34:07
672
原创 C++封装继承多态理解
面向对象的三个基本特征: 封装 、继承 、多态简单概括三大特性作用: 封装是为了代码模块化和增加安全性 继承是为了重用和扩展现有的代码模块 多态是为了接口复用 封装: 保护数据成员,不让类以外的程序直接访问或者修改类的成员,只能通过其成员对应方法访问(即数据封装) 隐藏方法实现的具体细节,仅仅提供接口, 内容修改不影响外部调用(即方法封装) 继承: 三种继承方式:public、protected、private。 继承的...
2020-12-29 19:33:05
2857
原创 C++文件流
// Observer_Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>using namespace std;/************************************************************************//* C++通过以下几个类支持文件的输入输出---> ofstream: 写操作,
2020-12-29 19:32:12
201
原创 C++引用以及引用和指针的区别
1. 什么是引用?引用就是某个变量的"别名"(alias),对引用的操作与对变量直接操作效果完全相同。申明一个引用的时候一定要初始化(故引用不会为空)。引用申明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能在把引用名作为其他变量的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名时目标变量的一个别名,它本身不是一种数据类型,因此引用不占存储单元,系统也不会给引用分配存储单元。2. 不能建立数组的引用-->这句话的意思是我们不能建立一个数组元素是引用的数组,但是还是可..
2020-12-26 12:03:03
270
原创 C++中#(一个#号)和##(两个#号)的用法和作用
1 C++中#(一个#号)和##(两个#号)的用法和作用1 关于一个#号:在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作, 简单说就是对他所引用的宏变量通过替换后再其左右各加上一个双引用。例子:# define WARNIF(EXP) \do{ \ if (EXP) \ { \ fprintf(stderr, "warning:" #EXP "\n"); \ } \ }while(0) 在实际使用中会出现下...
2020-12-26 12:02:20
9016
原创 static和const和define关键字比较
一般内存主要分为: 代码区、 常量区、 静态区(全局区)、 堆区、 栈区 这几个区域大小端测试:数据在内存中存放,有大端模式和小端模式小端模式(little-endian):低位字节存放在低地址上,高位字节存放在高地址上大端模式(big-endian):低位字节存放在高地址上,高位字节存放在低地址上。网络字节序:TCP/IP各层协议将字节序定义为Big-Endian, 因此TCP/IP协议中使用的字节序通常称之为网络字节序static uint32_t m=0x87654321;char *p=
2020-12-26 12:01:02
324
原创 判断设备是否挂载
//判断设备是否挂载#include <stdlib.h>#include <string.h>#include <assert.h>#include <stdio.h>#define MOUNT_PATH "/proc/mounts"int check_dev_mount(const char* p_device_name){ assert(NULL != p_device_name); assert(0 < strl...
2020-12-26 11:59:55
902
原创 C 语言中获取文件长度(ftell函数)
C 语言中获取文件长度(ftell函数):原理:将文件偏移到文件尾,然后获取文件尾和文件头之间的字节长度即为文件长度int get_file_len(const char* p_path){ int f_len = 0; if (NULL == p_path) return f_len; FILE* pf = fopen(p_path, "rb"); if (NULL == pf) return ...
2020-12-26 11:58:18
4157
3
原创 C++多继承菱形问题和解决方案
多继承的二义性:问题产生:一个派生类有两个或以上的基类(A B)其中A和B中有相同的成员名称或接口名称, 当派生类想调用时产生二义性 (这里的二义性是指无法直接通过变量名进行读取),需要通过域(::)成员运算符进行区分 C.A::m_a = 10; C.B::m_a = 15;菱形继承问题问题产生:一个派生类有两个或以上的基类,这些基类中存在相同的基类即(B继承A C继承A D继承B和C) 当派生类想要直接调用A类中的方法时,...
2020-12-26 11:57:29
751
原创 QSS使用总结
QSS使用总结:1. 什么是QSSQSS:全称Qt Style sheet即Qt样式表,他是Qt提供的一种用来自定义控件外观的机制。QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器更少,可以使用的属性也更少,并且并不是所有的属性都可以在Qt的所有控件上。2. QSS的使用1 全局QSS文件方式 一般将项目中所有控件的样式写入一个文件中,然后在程序启动后加载文件然后设置全局的样式int main(int argc, char* argv[]){ ...
2020-12-26 11:53:06
3865
2
原创 QML学习笔记1-基本语法
import QtQuick 2.8 //声明导入一个指定的模块版本// 注释和C++一样 //或 /**///每个QML文件都需要一个根元素//元素拥有属性 按照name:value的格式来赋值//任何在QML文档中的元素都可以使用他们的id来进行访问(id是一个任意的标识符)//元素可以嵌套 一个父元素可以用于多个子元素, 子元素可以通过 parent 关键字来访问父元素//一般QML文件中根元素id习惯使用rootRectangle{ id: root width: ...
2020-12-26 11:50:42
257
原创 QML学习笔记2-基本元素-组件-转换
基本元素元素类型:可视化元素、非可视化元素1 基础元素对象Item(基础元素)是所有可视化元素的基础对象,所有其他可视化元素都继承自Item,它自身不会有任何绘制操作,它的作用是定义所有可视元素的通用属性Geomery(几何属性):x,y(坐标)定义元素左上角位置,width(长) height(宽) z(堆叠次序)定义元素的重叠顺序 Layout Handling(布局操作): anchors(锚定),包括left(左) right(右) top(上) bottom(下), ...
2020-12-26 11:50:31
405
原创 QML学习笔记3-定位-布局元素
定位元素: 有一些QML元素被用于放置元素对象,被称为定位器QtQuick提供的定位器: Row、Column、Grid、FlowRow: 水平排列Column: 垂直排列Grid: 栅格rows/columns(行列)排列Flow(流) 通过flow(流)属性和layoutDirection(布局方向)属性来控制流的方向。它能够从头到底的横向布局,也可以从左到右或者从右到左进行布局布局元素: QML使用anchors(锚)对元素进行布局, 可以被所有的可视化QML元素使用anchors是
2020-12-26 11:50:19
897
1
原创 QML学习笔记4-动画-曲线-分组-状态
动态元素:1 动画(Animations):被用于属性的改变, 一个动画定义了属性值改变的曲线,将一个属性值变化从一个值过渡到另一个值.动画是由一连串的目标属性活动定义的,平缓的曲线算法能够引发一个定义时间内属性的持续变化。 所有在QtQuick中的动画都由同一个计时器来控制,因此他们始终保持同步,这也是提高了动画的性能和显示效果。动画控制了属性的改变,也就是值的插入。这是一个基本的概念,QML是基于元素,属性与脚本的。每一个元素都提供了许多的属性, 每一个属性都在等待使用动画。动画控制了属性的改变,每个
2020-12-26 11:49:57
508
1
原创 QML学习笔记5-模型-视图-代理
QML中的MVC 概念在QtQuick中 数据通过model-view(模型-视图)分离。 对于每一个view(视图) 每个数据元素的可视化都分给一个delegate(代理)在QML中 model(模型)与view(视图)通过delelate(代理)连接起来。 功能划分如下:model(模型)提供数据, 对于每个数据项 可能有多个值。显示在view(视图)中的每项数据都是通过delegate(代理)来实现可视化、view(视图)的任务就是排列这些delegate(代理)每个delegate(代理
2020-12-26 11:24:30
690
1
原创 QML属性介绍
基本可视化项Item 基本的项元素 在QML中所有可视化的向都继承他Rectangle 基本的可视化矩形元素Gradient 定义一个两种颜色的渐变过程GradientStop 定义个颜色,被Gradient使用Image 在场景中使用位图BorderImage (特殊的项) 定义一张图片并当做边界AnimatedImage 为播放动画存储一系列的帧Text 在场景中使用文本TextInput 显示可编辑为文本IntValidator int 验证器DoubleValidator do
2020-12-26 11:23:50
922
原创 Lua 中元表及元表方法学习
今天花了一些时间学习了Lua元表与元表方法,这里做个笔记,方便下次理解查看引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等。但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作。表和完整的用户数据具有独立的元表(尽管多个表和用户数据可共享元表);每种其他类型的所有值共享一个元表。所以,所有数字共享一个元表,字符串也是,等...
2019-05-04 11:33:15
575
原创 把线程放到指定CPU中运行
前言当前计算机都是多核的,linux2.6提供了进程绑定cpu功能,将进程指定到某个core上执行,方便管理进程。linux提供了sysconf系统调用可以获取系统的cpu个数和可用的cpu个数。使用方法//目前在线的CPU数量int cpu_nums = sysconf(_SC_NPROCESSORS_ONLN) /// @brief 把线程放到指定CPU中运行/// @p...
2019-02-26 19:32:06
2644
原创 自定义内存检测原理及方案
在项目开发中,或多或少都会遇到一些内存泄露的问题,今天就来总结下检测内存泄露的原理及其方法1 将使用的系统的动态申请/释放内存的函数重新重载实现一遍,如new、delete、malloc、free等等2 创建一个链表来保存申请/释放信息.3 在需要动态申请内存时使用自己重载后的申请函数。申请函数中记录下申请的地址, 内存大小,然后和一些关键属性,如文件名、函数名、函数、行号等等组成一个列表...
2018-10-23 19:26:27
1212
原创 C使用lua_next遍历嵌套的table(上)
概述前面的 Lua笔记-关于lua table的C API 文章中已经讲到了关于Lua table的一些函数,如setfield、settable等等今天我们讲如何通过lua_next函数来遍历table,当然取内容的时候还是要用到前面介绍的那些API的,这篇文章主要讲解lua_next函数的原理。lua_next函数在前面的的那些操作table的api中大多需要知道key,这个可以解析固定格式的...
2018-03-08 20:59:16
4296
原创 C与Lua交互之将C结构体组成table传递到Lua
概述前面的Lua与C交互之函数注册中讲述了怎么将C函数注册到Lua中让Lua使用。当Lua中调用C提供的获取数据的接口时,C怎么将多个结构体类型转换成Lua的嵌套table类型呢?下面通过一个例子来讲解例子详解C数据类型typedef struct student{ int age; ///< 年龄 int grade; ///< 年级 char name[32];...
2018-03-07 21:09:25
6114
4
原创 Lua与C交互之函数注册
概述前面讲了C与Lua交互的原理,其中讲到了Lua调用C的接口时,需要C将函数通过注册机制注册到当前lua_State的全局变量中,接下来通过一个实例具体介绍怎么注册并调用到C的函数接口。1 实现实际操作的C函数static int add(int a, int b){ return a+b;}static int sub(int a, int b){ return a - b;}...
2018-02-28 19:26:59
2533
原创 C与Lua交互之交互原理
lua作为脚本语言,就是用来扩展宿主程序或者嵌入到宿主程序中的,这里宿主程序使用C来讲解下Lua与C交互的原理。在这之前先讲下C语言是如何调用函数以及函数参数的。C函数和参数的调用我们都知道C语言的函数调用时通过函数调用栈实现的,当一个函数调用另一个函数时,会按照约定的格式将要调用的函数的参数压人栈中,在被调用的函数中,可以按照约定的规格将参数从栈中取出, 同理对于返回值的传递也是通过堆栈实现的,...
2018-02-28 16:04:21
1908
转载 TCP长连接与短连接的区别
TCP长连接与短连接的区别1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2.
2018-01-03 17:31:14
610
原创 fopen函数失败原因分析以及分析原因的方法
概述:最近在分析一个偶现的问题,偶现概率特别低,问题还在分析中。把分析的知识做个总结,后面再继续补充。问题描述:代码在调用Lua的require函数时发生异常,通过查看require的源码跟踪,发现该函数的fopen函数返回打开文件失败的异常,下面就来总结下fopen打开文件出错可能有哪些原因,也许不全,欢迎补充。函数介绍:函数原型 FILE * fopen(con
2017-12-21 16:14:02
63324
15
转载 Lua笔记-关于lua table的C API
//Lua笔记-关于lua table的C API //转载请注明来自yuliying的CSDN博客. //Lua版本5.2 /*相关API: lua_createtable 原型: void lua_createtable (lua_State *L, int narr, int nrec); 描述: 创建一个新的table并将之放在栈顶.narr是该tab
2017-12-01 15:40:32
1515
原创 DHCP协议原理及抓包分析
DHCP的作用:DHCP 全称Dynamic Host configuration protocol,动态主机配置协议。 它可以为客户机自动分配IP地址、子网掩码以及缺省网关、DNS服务器的IP地址等TCP/IP参数, 简单来说,就是在DHCP服务器上有一个数据库, 存放着IP地址、网关、DNS等参数。 当客户端请求使用时, 服务器则负责将相应的参数分配个客户端,避免客户端手动指定IP
2017-10-15 10:25:36
30898
3
原创 wireshark工具使用详解以及Tcp三次握手抓包解析
概述今天学习了下抓包工作的使用,写个文档记录下笔记总结。Wireshark介绍wireshark是非常流行的网络封包分析软件,可以截取各种网络封包,显示网络封包的详细信息。wireshark用处: wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。为了安全考虑,wireshark只能查看封包,而不能修改封
2017-10-12 22:25:58
24325
原创 XMl与Json学习笔记小结
概述:在我们的项目中用到XMl和Json格式的数据或者文件作为数据保存的格式,于是学习了XMl和Json的语法,做个小笔记总结下。XML基本知识点一个简单的xml实例 Tove Jani Reminder Don't forget me this weekend!1 XML文档必须要有根元素 如下所示:......2 XMl声明
2017-10-12 22:15:08
478
QtXlsx Excel读写
2022-04-06
QtXlsx读写Excel工具
2022-04-05
程序文档生成工具-Doxygen
2016-11-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人