- 博客(121)
- 资源 (4)
- 收藏
- 关注
原创 qml属性绑定问题
最近项目中遇到qml属性绑定相关的两个问题:改变object对象的属性,qml绑定的相关属性没有改变 改变绑定属性,导致绑定关系被打断上面两个问题说的有点不清楚,接下来看代码详解Window{id:mainWndvisible:truewidth:640height:480title:qsTr("HelloWorld")propertyvarrobotInfo:{"name":"robot1","light_s...
2020-09-17 19:50:26
585
原创 QML自定义模态窗口
最近接手的新客户端项目是用QML做的界面。既然是客户端,就需要用到各种弹窗,自然少不了自定义各种样式的弹窗。模态窗口是最常用的弹窗之一,以下是我自定义的两种模态窗口实现。第一种是基于Window,第二种三基于Rectangle,而我的项目代码中不知道什么原因大部分都是用了Rectangle实现。//基于Window//WindowTemplate.qmlWindow { i...
2019-10-04 22:20:29
3637
1
原创 QHostInfo检测网络
平时,我们检测网络是否连接,一般都是用ping命令。实际开发中,经常也需要检测网络状态。最近之项目过程中就需要实现这一的功能,在网络断开时给出相应的用户提示。QHostInfo给我们提供了一个方便的接口,实现这一的功能。话不多说,先上一段代码demoNetWorkTest *NetWorkTest::GetInstance(){ static NetWorkTest ins...
2019-10-03 15:46:54
883
原创 lua源码分析:字符串
字符串类型typedef struct TString { CommonHeader; lu_byte extra; 短字符串保留字 lu_byte shrlen; 短字符串长度 unsigned int hash; 字符串hash值 union { size_t lnglen; 长字符串长度 stru...
2019-05-13 23:44:07
440
原创 lua源码分析:lua的数据类型
Lua是一个小巧的脚本语言。也被广泛应用,比如游戏开发。引擎用c++,经常变动的业务层用lua实现。做了几年的lua应用开发。最近想研究一下lua的具体实现,深入的了解lua。lua版本:5.3.5Lua特性:可移植性 良好的嵌入性 非常小的尺寸 高效,速度快Lua源码大体分为三个部分:虚拟机核心、内嵌库以及解释器、编译器Lua 虚拟机工作流程1.将 Lua代码进行词法...
2019-05-12 17:32:17
530
原创 leetcode:数组中重复的数据
给定一个整数数组 a,其中1 ≤ a[i] ≤n(n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]思路:这类求次数的题,我们很容易想到用额外数组进行计数统计。但是显然不符合题目要求,题目要求不能用额外空间。...
2019-05-04 11:14:15
590
原创 leetcode:无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最...
2019-05-02 13:16:03
132
原创 electron学习笔记:electron入门
1.关于electronelectron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将chromium和node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。 2.最基础的electron程序基础的Electron程序三个文件:package.j...
2018-07-31 21:07:04
807
原创 深入理解C++多态
面试必问题:c++如何实现多态。C++多态实现方式:基类定义虚函数,子类继承基类,并重写虚函数。虚函数放在虚函数表,类对象都有一个虚函数指针指向虚函数表。虚函数表真正的函数地址和虚函数指针都是在构造函数中进行初始化的。即子类重写基类的虚函数后,子类的虚函数表中保存的地址是子类的虚函数地址。子类对象的虚函数指针在构造函数中初始化,指向子类自己的虚函数表。1、对象的静态类型:对象在
2017-12-30 23:45:09
364
原创 关于虚函数的面试题
class A{public:void sayhello(){cout }private:};class B{public:virtual void sayhello(){cout }private:};int main(){A *pa = NULL;pa->sayh
2017-12-21 21:51:15
814
原创 jd手机信息爬虫
最近在自己学习python和研究网络爬虫,自己用scrapy实现了简单的爬虫,爬取京东手机信息,值爬了第一页的手机名称,价格,手机店名,成交量等信息。不是很完整,后续继续研究,一步一步晚上。1. 使用的IDE是pycharm,环境比较难折腾2. 由于是动态网页,开始的时候怎么也获取不到价格等信息,所有用了PyQt5加载网页,然后再获取信息。3. 把信息导出
2017-09-18 21:37:52
837
原创 window线程池
window提供了线程池机制,方便开发。这些线程池函数允许我们做以下事情:1.以异步方式来调用一个函数。2.每个一段时间调用一个函数3.当内核对象触发时调用一个函数4.当异步IO请求完成时调用一个函数一、以异步方式调用一个函数:相关API:TrySubmitThreadPoolCallback回调函数原型:VOID NTAPI SimpleCallback(PT
2017-09-03 00:11:02
360
原创 Window下编译libcurl
Window下编译:方法一:1. 下载并解压到文件夹(我到文件夹为curl-7.54.1)2. 进入目录curl-7.54.1->projects->windows.目录下面有各自vs版本对应到工程,选择适合自己已经安装到vs版本,打开工程。3. 解决方案下面包含两个工程,curl和libcurl。Libcurl就是我们要用到库4.
2017-08-02 21:59:21
2101
原创 各种api 的坑
最近在做新的项目,设计打文件传输问题,lua和c++交互。踩了不少坑,也收获很多。1.luaL_tointeger 和lua_tonumber在把大文件的大小传给c++时,用lua_tointeger取出,导致计算出错。后来经过仔细看了lua api文档,才发现,这个接口转出的结果是整形,长度明显不够。最终只能用lua_tonumber解决问题。lua_tointegerlua_I
2017-07-12 23:23:25
581
原创 lua模块
来公司一年多了,一直在用lua做开发。公司有封装好的lua接口,没有源码,所以只能自己研究相关接口的大概原理。关于lua模块,网上有很多博文,大概的实现方式无外乎是,在单独的lua文件定义一个table,然后通过return 返回。用的时候通过require 加载。这样可行,但是有点繁杂。我们知道模块是通过table方式存在。可以通过把table注册到全局表,在需要用到的地方再取出
2017-06-07 08:42:03
432
原创 第一章:温故而知新
1.程序的虚拟地址和物理地址存在一种映射关系,这种映射说由MMU(Memory Manager Unit)完成的。2.分页说把地址空间人为的分成固定大小的页,每一页的大小由硬件决定。目前几乎所有的PC页大小都是4KB,我们把虚拟空间的页叫做虚拟页,VP。物理内存页叫做物理页,PP。磁盘中的页叫做磁盘页,DP。3.线程说轻量级的进程,说程序执行流的最小单元。一个标准的线程由线程ID,当前指令
2017-03-02 09:33:54
315
原创 lua 编译,执行与错误
1.dofile是lua内置的函数,用于执行代码块。2.loadfile从一个文件加载lua代码块,但它不会运行代码,只是编译代码,然后将编译的结果作为一个函数返回。3.loadstriing类似于loadfile,它从一个字符串中读取代码,而非从文件读取。loadstring总是在全局环境中编译它的字符串。i = 32local i = 0 f = loadstring("i
2016-10-26 22:08:56
408
原创 lua函数
Lua的函数定义一般形式如下:optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)function_bodyreturn result_params_comma_separatedend在 Lua 编程语言的方法定义包括方法头和方法体。这里是方法的所有
2016-10-25 19:56:32
404
原创 const 和全局变量
C++中,全局变量的存储都是静态存储。但是链接性质可以有外部链接和内部链接。默认情况下是外部链接,如果在定义前加上 static ,则变为内部链接。//file1.cpp int val1 = 5;extern int val2;void fun1(){ cout cout cout}//file2.cppint val2
2015-12-20 13:13:52
1924
原创 qml实现简单记事本程序
最近自学qml,尝试用qml写个小程序,熟悉qml简单用法#ifndef FILERWRITER#define FILERWRITER#include #include #include #include #include#include//该类主要实现文件的读写功能class FileRWritter:public QObject{ Q_OBJECT
2015-11-26 19:50:28
1416
1
原创 vs2008创建xpcom组件
百度好多都没有找到window下使用xpcom开发的完整例子,自己写了一个首先,创建简单计算器组件calculator,新建接口文件ICalculator.h,类定义头文件Calculator.h和实现文件Calculator.cpp,需要以下配置设置:1、工程属性页——连接器——输入 ——附加依赖项 ,添加链接库 embedstring.lib nspr4.lib plc4.l
2015-11-11 11:49:26
819
原创 使用XPCOM工具
本章内容包括• “Generic XPCOM Module Macros”• “String Classes in XPCOM”• “Smart Pointers”• “weblock2.cpp”XPCOM MacrosGeneric XPCOM Module Macros入门指南对于建立通用的组件代码很有用的。但是只有少
2015-11-09 22:38:01
754
原创 创建组件代码
What We’ll Be Working On我们致力于的组件在这本书中为你的浏览器控制中的一个特殊模式,防止用户离开当前域或一组安全域。一旦启用,这种界面锁模式进行密码保护,直到有密码的人把它关闭。它可以使儿童可以安全的使用浏览器,或者现在在特定的服务器进行针对性的浏览。WebLock组件的大部分工作是准备自身,找到组件要用的XPCOM接口,并连接到Gecko浏览器现有
2015-11-09 22:35:36
725
原创 组件内部
Creating Components in C++让我们开始检查怎么用C++写XPCOM组件,最常见的组件类型是用C++写,然后编译成dll。下图显示了你实现的动态库和XPCOM框架之间的关系。当你创建一个组件或模块,并编译成库时,必须要导出一个NSGetModule方法,NSGetModule方法是访问库的入口。在注册或注销组件时,或XPCOM需要查询组件或库实现哪些接口时
2015-11-09 09:11:03
502
原创 使用XPCOM
开始使用XPCOM的最好方法是,看客户端怎么使用XPCOM。尤其是当你要设计接口给其他人使用时。像Mozilla浏览器的应用程序复杂,模块化的客户XPCOM组件,实际上,几乎用到的所有的功能,包括导航、窗口管理、cookies管理,书签, 安全、搜索、渲染和其他特性都是定义为XPCOM组件并通过接口访问。Mozilla由XPCOM组件构成。本章演示了Mozilla怎么使用XPC
2015-11-08 11:35:27
903
原创 什么是XPCOM
XPCOM解决方案XPCOM允许开发者把软件项目分解成模块,这就是所谓的组建,在运行时被组装在一起。XPCOM的目标就是使得各个模块可以独立开发。为了组件在程序中的互操作性,XPCOM把组件的实现和接口分离。但是XPCOM也提供一些工具和库用于加载和操作组件和服务,使得开发者能写出支持版本和跨平台的代码,这样组件就可以被替换或升级而不是重建程序。使用XPCOM,开发者开发的组件可以在不同的
2015-11-07 22:32:55
1755
原创 Bufferevents:概念和基础
大部分情况下,程序除了响应事件之外,还需要做数据缓存。例如,当我们需要写数据时,通常的模式如下:1.确定要给一个连接写数据,将数据写入缓冲区2.等待连接可写3.写尽可能多的数据4.记下已经写入多少数据,如果数据还能写完,并等待连接再一次可写这种IO模式很常见,Libevent 为此提供了一个通用的机制。bufferevent由一个底层传输,写入和读出缓冲区组成。用回调函数取代常
2015-10-27 21:04:50
542
原创 event_base回调解析
刨根问底,了解libevent如何实现异步IO。从后往前研究,先看event_dispatch干啥了event_dispatch的实现int event_base_dispatch(struct event_base *event_base){ return (event_base_loop(event_base, 0)); //唯一的操作是调用event_base_
2015-10-26 00:49:27
501
原创 libevent源码分析
使用libevent的最基本的步骤:1.创建event_base2.创建相应的event3.添加event4.启动事件循环下面通过简单例子:#include#include#includevoid timerCallBack(evutil_socket_t fd,short event,void *arg){ printf("time ou
2015-10-25 19:27:42
135
原创 事件处理
libevent的基本的操作单元就是事件。每个事件体现一组条件,包括:1.就绪的可读或可写的文件描述符2.变得就绪的可读或者可写的文件描述符3.时间超时4.发生信号5.用户触发事件。一、创建事件对象#define EV_TIMEOUT 0x01 //超时则触发事件#define EV_READ 0x02 //提供的文件描述
2015-10-24 19:14:51
469
原创 Evbuffers:IO缓冲的实用功能
evbuffer 实现一个字节队列,优化了数据添加和删除。一、创建或释放evbuffer struct evbuffer *evbuffer_new(void);void evbuffer_free(struct evbuffer *buf);二、evbuffer 与线程安全int evbuffer_enable_locking(struct evbuffer *bu
2015-10-24 19:08:50
1048
原创 使用事件循环
一 、运行循环一旦我们创建了一个已经注册了事件的event_base。接着就需要libevent等待并提醒事件。#define EVLOOP_ONCE 0x01 //等到事件被触发,然后运行活跃事件,直到没有事件需要运行则退出。#define EVLOOP_NONBLOCK 0x02 //不等到事件被触发,只检查使用有事件要触发,并执行回调。
2015-10-23 19:23:58
606
原创 创建event_base
在使用libevent函数之前,你需要至少创建一个event_base。每个event_base保护一组event并可以轮选检测那个event是活跃的。如果一个event_base设置为使用锁,多个线程可以对其安全的访问。它的循环只能在单线程中运行。如果想有多个线程轮询IO,则每个线程都需要有一个event_base.每个event_base都有一个方法来判断那个event是活跃的。公认的
2015-10-23 19:15:57
496
原创 设置libevent
libevent有一些全局设置是整个程序共享的,这些设置影响整个库。在调用libevent库的其他部分之前都需要对这些设置进行修改,否则libevent可能处于不一致状态。1.日志libevent记录内在的错误和告警,如果支持日志进行编译,它也能记录调试信息。默认情况下,这些信息输出到stderr,我们也可以提供自己的日志函数改变输出。涉及的接口:#define EVENT_L
2015-10-22 23:08:03
469
原创 libevent介绍
libevent可以用于快速编写轻量级的非阻塞IO。设计目标主要有:1.可移植性 libevent编写的程序可以在所有平台上运行2.速度 libevent在每个平台上都尽可能使用最快的非阻塞IO的实现方案。3.可扩展性程序即使需要成千上万的活动的socket也能很好的运行。4.便利用最自然的方式来写libevent程序应该是文档的方案。libevent
2015-10-22 19:15:46
381
原创 Linux学习笔记-sed编辑器基础
sed编辑器称为流编辑器,与普通的编辑器不同,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。常用命令一 替换命令 ss/pattern/replacement/flagsflags有4种可用的替换标记1.数字 ,表明新文本将替换第几处模式匹配的地方2. g,表明新文本将替换所有已有文本出现的地方3. p ,表明原来行的内容要打印出来4. w
2015-10-21 19:59:10
313
原创 Linux学习笔记-结构化命令2
一 for 命令for var in listdo commandsdonelist 参数提供了循环要用的一系列值,var每次迭代会依次遍历list中的当前值1.从列表中读取值数据值包含单引号时,需要用转义字符来将单引号转义,或者使用双引号把值圈起来。如 for test in i don't know if this'll workdo
2015-10-21 19:57:41
363
原创 Linux学习笔记--结构化命令
一 if-then语句格式 if command then commands fi if-then-else语句格式 if command then commands else commands fi嵌套ifif command1then comm
2015-10-20 21:30:42
307
原创 Linux学习笔记---shell脚本基础
一 脚本第一行为#!bin/bash#作为注释行二 。echo 用来输出一行文本,默认情况下不需要引号。echo 可以用单引号和双引号,但是如果需要在输出文本中用到其中一种引号,则需要用另外一种引号把字符串圈起来。如 “you ' re welcome ”echo 的参数echo -n 去掉echo输出时候的换行符(与-e选项下的c同意)echo -
2015-10-20 19:38:19
434
原创 Linux学习笔记--递归
递归实现阶乘 function factorial{ if [ $1 -eq 1 ] then echo 1 else local temp=$[ $1 - 1 ] local result=`factorial $temp` echo $[ $result * $1 ] fi }
2015-10-20 19:34:59
333
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人