- 博客(89)
- 收藏
- 关注
原创 QT通过QStyle自定义滚动条
在qt里面有默认的滚动区域可以方便使用,QScrollArea,这个自带了水平和垂直滚动条。但是这些默认样式一般不是我们想要的,例如很多时候我们只需滚动块,而不需要其他的控件。例如效果:现在介绍自定义滚动条。1.关闭默认滚动条显示在使用QScrollArea时,垂直和水平滚动条全部不展示: area->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); area->setHorizontalScrollBa.
2022-04-04 20:25:36
3114
3
原创 libcef和js交互
1.下载libcef_wrapper工程:https://cef-builds.spotifycdn.com/index.html#windows32 这是别人编译好的工程,libcef只提供了C语言api,lib_warpper是一个对C接口进行包装的工程。
2021-07-11 17:10:16
689
1
原创 从汇编角度看一个C函数调用
简单的来个C函数调用:#include<stdio.h>int Add(int a, int b){ return a + b;}void main(){ int a = 20; int b = 30; int res = Add(a, b); printf("%d\n", res);}通过od打开后,main函数的反汇编如下:PUSH EBP; assignment.00D81010(guessed void)MOV EBP, ESPSUB E..
2021-03-16 15:34:49
281
原创 umdh追踪内存泄漏
umdh是windbg附带的工具。可在windbg安装目录找到1.使用umdh前需要使用gflags创建用户模式堆栈跟踪:gflag.exe /i test.exe +ust2.设置应用的pdb路径:set _NT_SYMBOL_PATH=C:\test (符号目录)3.运行程序,并第一次追踪:umdh.exe -pn:test.exe(进程名) -f:1.txt(输出文件)4.过段时间,第二次追踪:umdh.exe -pn:test.exe(进程名) -f:1.tx
2021-01-16 13:37:01
461
原创 前后端数据交互
WEB程序我们都知道处理流程:页面在用户操作后,封装成请求发送到后台,然后后台处理并响应页面的请求。但页面怎样发送请求的,其实对于写C代码一直面对黑屏终端的我们初学者是真的不知道怎样做的。由于毕业设计需要加入WEB,特此去了解了JS的AJAX请求,才了解到页面是怎样处理的。故写博客记录JS和PHP后台交互的简单demo。一.准备工作1.WEB网点搭建为了方便,我使用了phpstudy,这个软件集成了Apache+Php+Mysql,直接启动后就可以建立一个WEB网站,在WWW目录下就可以加入ph
2020-05-24 23:38:23
309
原创 VS2015编译QT的ui文件
1.首先安装QT VS Tools插件,在VS的联机安装可以直接安装,或者到微软官网下载,安装完该插件,VS的上方多了QT VS Tools的选项证明安装成功2.在Qt官网安装windows平台的版本3.新建一个C++工程,并引入Qt的include目录和lib目录4.设置ui文件的属性: 点击ui文件,右击进入属性,项类型选择“自定义生成工具”:确定后,选择“自定义...
2020-04-11 00:07:36
4908
原创 利用pstsdk进行解析pst文件
pstsdk下载地址:https://archive.codeplex.com/?p=pstsdk下载后,我们只需要取出pstsdk目录,并自己进行dll封装,实现提取邮件内容、主题、收件人信息,把附件保存在一个目录下。利用VS2015进行调用该dll。下载后,把新建一个pst目录,把头文件剪贴到原本的pstsdk目录外边,新建pst目录结构如下:要编译pstsdk库,需要boos...
2019-11-02 16:02:20
1677
原创 unicode、多字节和utf8互转
#include<windows.h>#include<stdlib.h>#include<string>//多字节转为utf8int MultiByToUtf8(const char *multi,char *&utf8){ int size = 0; size = MultiByteToWideChar(CP_ACP, NULL, m...
2019-11-02 09:58:59
276
原创 http请求-1
http请求http是网络中最为常用的一种传输协议,其全称为超文本传输协议。说到http请求,则需要了解到tcp/ip的四层模型。tcp/ip四层模型在国际化标准组织中,有个OSI七层模型,而tcp/ip模型就是把一些层合并了:而tcp/ip的各层中,均应用着一些不同的协议,而http则是应用在应用层:应用层 常见的协议有HTTP协议,FTP协议传输层 常见协议有TCP/UDP协议...
2019-10-27 14:56:57
867
原创 宏#和##
#和##这两个宏在项目中见到,所以特意记录一些笔记下来,方便以后查看!宏##是把其左边的参数字符串化,其实就是为其加上了"",例如:#define _STR(x) #x //为x加上""std::cout<<_STR(abc);当我们打印后,输出:abc如果传入的是字符串:std::cout<<_STR("abc");那么输出的是带...
2019-10-26 10:57:46
3460
原创 VS2015编译7z源码
首先在7z官网中下载7z源代码,地址:https://sparanoid.com/lab/7z/download.html我下载的是1604版。解压后目录为:进入CPP目录将会看到Build.mak文件,需要对该文件作出修改:1.首先右键>>把文件的只读权限去掉,使其可以被修改2.把33行改为如下:打开VS2015,打开目录:7z1604-src\CPP\7zi...
2019-09-29 22:51:29
1526
原创 UnRAR.dll解压rar文件
unRAR是一个开源的解压rar文件的C++第三方库,源码的github地址:https://github.com/aawc/unrar.git百度文库的一份基本说明:https://wenku.baidu.com/view/feec405abe23482fb4da4c31.htmlunrar的源码下有生成dll的工程,直接用VS2015进行编译可以得到dll和lib:我们需要的就...
2019-09-28 11:52:39
2490
原创 对象或库文件"xx.obj"是使用比创建其他对象所用编译器旧的编译器创建的
在使用VS2015编译程序是,出现了如下错误信息:对象或库文件"xx.obj"是使用比创建其他对象所用编译器旧的编译器创建的;请重新生成旧的对象和库根据网上的信息,在工程属性->常规->项目默认值->全程序优化一项中,选择无程序优化。这样VS就能生成对应的库了。但是,在生成代码过程中出现了:fatal error C1900: 20150812版和20130802...
2019-09-21 15:57:37
3174
原创 win32命令行参数
在开发win32程序时,经常要对命令行参数进行处理,例如一个安装程序,我们希望提供参数,使得程序可以通过批处理进行自动安装。1.main函数参数获取main函数的参数获取非常简单,并且main的参数已经把命令行参数分割出来了,简单对命令行参数进行打印:#include<stdio.h>int main(int argc, char *argv[]){ int i;...
2019-09-08 17:12:58
942
原创 ubuntu配置apache运行cgi脚本
目前在网上apache配置cgi脚本都比较旧了,深受其害!!!安装完后进入下面的目录:cd /etc/apache2/conf-enabled打开下面的配置文件:sudo vim serve-cgi-bin.conf 把默认的cgi目录修改为你自己的目录:ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/ #修改为你的cg...
2019-07-29 18:34:21
364
原创 Ubuntu 静态库和动态库制作
库的本质是可执行的二进制码,库的作用就是复用。静态库在链接期间把库文件加到主程序中,而动态库则是运行时再加载进去。程序从编译到运行的四态:从gcc的--help中可以看到:-E 预处理,不会编译、汇编和链接-S 编译,不会汇编和链接-c 编译和汇编,但不会链接-o 输出可执行文件而库则在链接期间被链接至汇编文件,然后生成可执行文件:静态库:1.链接期间会...
2019-06-28 20:00:14
1601
原创 Ubuntu的压缩工具
1.gzip压缩:该工具只能压缩文件,后缀名位.gz,比较少用,命令格式:gzip filename默认没有保留原来的文件,如果想保留可嘉参数: -k解压:gunzip filename.gz2.bzip2这个工具和gzip比较像,也是不能压缩目录,后缀名位:.bz2,想要保留原文件也是加参数: -k压缩:bzip2 filename解压:g...
2019-06-25 15:07:29
5335
原创 Ubuntu源码安装wireshark
第一次使用源码安装软件,实在是非常的蛋疼和刺激,经过一番苦战,终于成功!!!我的Ubuntu是14i386的,里面就装了git、tree、vim等一些基本工具,而这次安装wireshark,则是安装依赖到怀疑人生。首先到官网下载源码:https://launchpad.net/ubuntu/+source/wireshark选用你想要的版本。然后进入下载目录解压:tar ...
2019-06-24 12:17:43
2127
原创 Ubuntu14安装搜狗输入法
在安装搜狗输入法前,需要安装fcitx,直接利用apt-get在线安装,在搜索中可以找到fcitx:安装完fcitx后,需要把Ubuntu的默认输入方式从ibus改为fcitx,进入语言支持,然后选择输入方式:搜狗输入法有专门的linux版本,链接:https://pinyin.sogou.com/linux/这是个.deb包,进入下载目录,然后:sudo dpkg ...
2019-06-23 18:18:24
906
原创 C++之string基本操作
熟悉STL里面的数据结构对我们做算法题有非常大的帮助,博主在Leetcode上做题就深感对STL的不熟练带来的尴尬,大多停留在C语言的思想做题。而熟悉STL不但可以优化算法,还可以装逼。string类简化我们对字符串的操作,想想C语言的字符串的增删改查,一不小心就Bug了。string还封装了专门用于宽字符的wstring,操作基本都一样。构造函数:string有重载了非常多构造函数,...
2019-05-19 15:49:06
5626
1
原创 正则表达式
正则表达式(regular expression)包含在C++的regex库中,正则表达式用于查找、替换字符。在regex库中,有3个常用的接口。1.regex_match:regex_match()是全匹配,只有目标字串符合匹配模式才能匹配成功。string dat = "example:<hello>regex<world>";regex reg("&l...
2019-04-12 21:33:51
137
原创 11.链表
链表是由一个个结点(Node)连接而成的,结点分为数据域、指针域。指针域用于指向其后面的结点地址,而在链表尾部节点的指针域置为空(NULL),代表链表的结束。通常节点的数据形式为:struct listNode{ listNode *next; //指针域:指向后面节点的指针 dataType data; //数据域:保存数据};和数组的区别:1.遍...
2019-03-30 21:58:42
97
原创 10.栈stack与队列queue
栈(stack)是最常见的数据结构,其特性是“先进后出”。栈有进栈(push)和出栈(pop)两个操作,如同把一个个月饼装进(push过程)盒子,你若想拿到最下面的月饼,则需要把盒子上面的月饼一一取出(pop过程)。栈的应用:后缀表达式操作符在操作数后面的表达式叫后缀表达式,中缀转化为后缀表达式后,利用出栈和入栈则可以计算出表达式的结果。在这里不再分析,因为前面有博客写过。队列...
2019-03-29 22:18:05
251
原创 9.基数排序
基数排序思想是对序列中的每个元素从个位到最大值的最高位进行比较,不足位数的用0补足,当排序结束后,可得有序序列。和计数排序有些类似,计数排序是对序列中的元素进行计数,而基数排序则是对每位上的数进行记录(实则是在排序),并且这两个排序均是没有发生比较的情况下完成的排序~~~~尤其觉得基数排序神奇。在基数排序中,我们需要10个代表0-9的数组,用来保存该位出现0-9中的元素,可以把这10个数组...
2019-03-20 21:47:17
188
原创 8.计数排序
计数排序需要建立一个表,这个表用来计数,统计每个数字出现的次数,这个表的长度为最大值和最小值的差+1,当最大值和最小值的差比较大时,建立的表也会非常大,非常消耗内存。建表结束后,再一次从表中取出数据,则可完成排序。例如:12 6 8 11 10在上面的序列中,最大值为12,最小值为6,那么需要建立一个长度为7的表进行计数。参考代码:#inclu...
2019-03-20 20:20:23
232
原创 7.堆排序
堆排序需要构建一个堆,这个堆近似完全二叉树。堆中的每个父节点均比两个子节点的值大,如果不符合这条规则的则需要对堆做出调整。而调整完毕后,则把堆顶元素出堆,再对剩下的堆元素进行调整,继续把堆顶出堆。直到全部出堆后,则可以得到排序好的序列。时间复杂度为nlog(n)。需要注意的是:堆排序中的堆是一个近似的完全二叉树,也就是每层的节点都是填满的(最后一层除外),最后一个节点前均没有空节点。堆结构...
2019-03-20 20:09:20
150
原创 6.归并排序
归并排序是归并两个有序的序列,这两个有序序列需要头尾两个指针,遍历这两个序列,按照排序规则保存在一个可以容纳这两个序列的序列中,当遍历结束,则新的序列为有序序列。当我们需要对某一序列排序时,可以把该序列分成两半,分别对这两半进行排序,然后归并这两个有序序列。而这两半又可以递归地分半,类似二分法。参考代码:#include<iostream>#include<std...
2019-03-17 21:20:49
149
原创 5.希尔排序
希尔排序是插入排序的改进,插入排序在序列基本有序时,非常的高效。插入排序是把序列的首个元素看做是有序的序列,然后把序列后面的元素往这个有序序列插入,其增量是1。而希尔排序则是取一定的增量的插入排序,其时间复杂度为nlogn。例如:5 4 3 2 1第一趟取增量k=List.length/2,即对:5 3 1进行插入排序排序后的序列为:...
2019-03-17 19:20:40
169
原创 4.插入排序
插入排序是把序列的第一个值当做是有序的序列,把余下的序列按照排序规则(升序还是降序)插入到该序列中,当遍历至序列尾部后,则形成有序序列。例如:6 5 4 3 2把6当做是有序序列,把余下的序列(5,4,3,2)按照升序插入到有序序列(6)中。第一趟结果:5 6 4 3 2 有序序列为(5,6)第二趟结果:4...
2019-03-09 16:57:42
128
原创 3.选择排序
选择排序是每次从序列中找到最小值(最大值),放到序列的前面,待n-1次找到最小值后,则序列为有序的。例如:假定min=List[ 0 ],index=0,在遍历余下的元素和List[ 0 ]比较,如果比其小则记录当前元素的索引,不断向前更新index,遍历至序列末尾后则和List[ 0 ]交换原序列:22 56 23 17 68第一趟:n=Lis...
2019-03-09 15:47:03
86
原创 2.快速排序
快速排序思想:每次找到一个标杆,在序列中的前面部分放置比标杆小的元素,在序列后面部分放置比标杆大的元素,那么标杆放置的位置则可以确认。待主循环结束,则是排序好的序列。确认标杆位置:在排序过程中,需要两个前后索引index[left],index[right]。index[left]向后前进,而index[right]往前回退。这两个索引需要找到不符合要求的元素(前面的元素比标杆大,后面的元...
2019-03-02 10:34:41
157
原创 1.冒泡排序
冒泡排序(这里采用升序排序)是不断比较临近的两个元素大小,若出现两个元素为降序的(L[ i ]>L[ i+1 ]),则交换两者的值。把最最小值冒泡至前面(根据判断条件不同而不同),循环结束后,则是排序好的序列。我写的程序是:每次都用前面的元素和后面的元素比较,若出现降序则交换。所以冒泡方式是,小的往前面移动。例如: 23 54 33 65一趟排序(用index[ 0 ]和...
2019-03-02 09:26:22
176
原创 螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出:...
2019-01-30 11:15:12
140
原创 中缀表达式转后缀表达式
后缀表达式又叫逆波兰表达式,在使用逆波兰表达式时,不需要括号,操作符在操作数的后面,不需要考虑优先级,仅仅是把栈顶的两个元素进行操作,操作完后又进栈,直到没有操作符后,栈顶则是结果。维基百科的解释:逆波兰表达式的解释器一般是基于堆栈的。解释过程一般是:操作数入栈;遇到操作符时,操作数出栈,求值,将结果入栈;当一遍后,栈顶就是表达式的值。因此逆波兰表达式的求值使用堆栈结构很容易实现,并且能很快求...
2019-01-27 12:58:29
211
原创 最长有效括号
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"分析:当出现字符" ) ",并且前面存在字符" ( "才有有效子串,用一个数组保存字符" ( "的索引
2019-01-27 12:24:46
265
2
原创 无重复字符的最大子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "..
2019-01-27 12:24:22
519
原创 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...
2019-01-27 12:24:08
107
原创 两两交换链表中的节点
LeetCode是众多大神修炼内功的地方,小编也向大神们看齐,开始了LeetCode的之路,但实在实力有限,做题速度非常慢~~~用博客记录自己的LeetCode之路吧~~~我是随机开始的,目前做的题还不多,慢慢来吧~~~给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->...
2019-01-19 11:18:57
96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人