Archived
「 28 」
-
March 2020
-
March 26, 2020【QT】qt5.9解析和构建Json字符串
前言QT5开始新增加几个相关类,专门用于处理JSON: QJsonDocument:provides a way to read and write JSON documents,用于读写json格式的文档 QJsonArray:encapsulates a JSON array,封装json数组 QJsonObject:encapsulates a JSON object,封装json对...
-
March 18, 2020【QT】使用vld进行内存泄漏检测
前言通过官网,我们可以了解到Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具,它有几个优点: 为每个泄漏的块提供完整的堆栈跟踪,包括可用的源文件和行号信息。 检测大多数(如果不是全部)进程内内存泄漏类型,包括基于COM的泄漏和基于Win32 / Win64堆的纯泄漏 所选模块(DLL或什至是主EXE)可以从泄漏检测中排除 提供泄漏块的...
-
January 2020
-
January 16, 2020【QT】多线程 -- 实现多线程的几种方式
前言假如将一些耗时操作放在UI线程处理,会导致UI卡顿,影响用户使用体验。因此,我们通常会将耗时操作放在新的线程中处理。这就涉及到线程的使用。在qt中,有几种方式启动多线程: 继承QThread,重新实现run()函数 使用QObject::moveToThread()函数 使用QtConcurrent模块 具体实现123456789101112131415161718192021222...
-
January 16, 2020【QT】进程间通信 -- 使用命名管道实现qt应用程序只运行一个实例
前言在项目中,会遇到这么一个需求,应用程序只能存在一个运行实例。关于这需求,网上流行几种实现方式: 通过QSharedMemory实现 使用官方提供的QTSingleApplication 使用QLocalServer和QLocalSocket 本文章主要介绍第三种方式 实现思路 继承QApplicaiton或者QCoreApplication自定义一个SingleApplication...
-
January 15, 2020【QT】进程间通信 -- 字节数组与int之间的转换
前言在上一篇粘包的文章中提到,解决粘包的一种方式是,自定义消息,在消息头中增加包总长度的信息。不管tcp还是命名管道,都是以字节流的方式传递给接收者的。在解包的过程中,需要将头部的总长度信息提取出来,这就涉及到字节数字与int之间的转换。 另外,在不同的操作系统、处理器,数据的存储还有大小端之分:高位在前低位在后,低位在前高位在后。因此需要提供两种转换模式 具体代码1234567891011...
-
January 15, 2020【QT】进程间通信 -- 粘包,拆包
前言不管是走命名管道还是TCP/IP的方式,都会有粘包的问题发生。粘包的产生的原因可以这么理解:客户端与服务器维持一个长连接,在连接不断开的情况下,可以持续不断地进行数据的交互。一个完整的包可能被TCP拆分为多个包进行发送,也可能把多个小包封装成一个大的数据包进行发送。 粘包的情况有几种: 收到一个完整的包,没有粘包 收到一个完整的包和下一个包的一部分 收到上一个包的一部分和下一个完整的包...
-
January 15, 2020【QT】进程间通信 -- TCP/IP
前言在上一篇文章中,主要介绍了命名管道的使用。除了命名管道外,其实TCP/IP也是进程间通信的常用技术。在qt中,主要是使用QTcpServer和QTcpSocket来实现的。 步骤大致的步骤跟命名管道是一致的,不同的是,命名管道在监听和连接时,使用a specified key,而tcp/ip需要指定ip地址和port端口 具体代码12345// 1. 服务端listen(const QH...
-
January 15, 2020【QT】进程间通信 -- QLocalServer/QLocalSocket(命名管道)
前言现在在逐步将项目中的功能块,这样子可以针对不同用户需求,灵活启用或卸载部分功能。目前,我们采用的方案是将功能打包成独立的exe,在启用时通过进程间通信进行交互。这里就涉及到进程间通信的技术,常用的技术有几种: TCP/IP 共享内存 QProcess 命名管道这里主要介绍命名管道的使用 步骤QLocalServer(服务端) 创建QLocalServer 调用server的list...
-
January 15, 2020【QT】全局换肤
前言给控件设置样式的方式常用的有两种: 在 QT Designer 中,选中需要设置样式的控件,右键–>改变样式表,即可以给控件设置样式 另外一种是在代码中动态设置,调用控件的setStyleSheet函数,为控件设置样式这两种方式都是针对单个控件的,假如需要对整个应用进行换肤呢?这时候可以使用.qss为后缀的文件进行统一设置 步骤 创建.qss文件 将需要实现换肤功能的控件的样式...
-
January 15, 2020【QT】动态监测U盘插拔
前言在项目中,遇到一个需求:需要动态监测U盘插入,自动读取U盘文件并打开。为了实现这个功能,我们可以使用RegisterDeviceNotification注册设备事件的通知,然后在程序中处理WM_DEVICECHANGE消息来实现 步骤 RegisterDeviceNotification注册设备事件的通知 在QWidget中重新实现它的nativeEvent函数来接收处理WM_DEVIC...
-
January 14, 2020【QT】QListWidget、QScrollArea等添加触摸滚动和惯性滚动
前言平时使用QListWidget/QScrollArea等内容视图可以滚动的控件时,一般是通过它们的滚动条来实现滚动的。在智慧课堂项目中,实施的学校使用的是一体机–window系统可触摸的大屏。当然也可以通过滚动条来拖动,但这对于习惯于手机触摸交互的用户来说,操作起来是很不友好的。因此,需要让这些控件支持触摸滚动。主要的实现方式有两种: 通过自定义控件,子类化这些滚动控件,重新实现它们的...
-
January 14, 2020【QT】动态添加 Horizontal Line 和 Vertical Line
前言根据业务的需求,有时我们需要用到一条水平分割线或者一条垂直分割线,在Designer里边,我们可以直接拖动一个Horizontal Line/Vertical Line来实现需求。但假如需要动态添加呢?在QT Assistant里边查找QLine/Line,发现并没有满足该需求的控件。但在qss中配置分割线的样式时,发现选择器使用的是QFrame,于是去翻查QFrame的属性等,发现QF...
-
September 2018
-
September 07, 2018【React Native】一、原生UI组件
前言React Native封装了大部分最常见的组件,但有时我们需要一些特殊的组件是React Native没有提供的。该文章将细说如何在React Naitve应用程序中封装和植入已有的原生UI组件。 步骤 创建一个ViewManager的子类 实现createViewInstance方法 导出视图的属性设置器:使用@ReactProp(或@ReactPropGroup)注解 把这个视图管...
-
August 2018
-
August 29, 2018【React Navigation】完整例子
项目介绍该项目将React Native 中文网 - 文档这部分内容浓缩为成一个android程序,方便童鞋们随时随地掏出手机学习React Native: 项目包含了React Navigation的部分章节内容,可以通过该项目源码配合熟悉之前的知识 需要打包的童鞋,可以参考章节IOS或Android 项目地址ReactOne 项目截图
-
August 29, 2018【React Navigation】十三、在任意组件中使用navigation属性
withNavigation是一个更高阶的组件,它可以将navigation属性传递给一个包装好的组件。当您无法直接将navigation传递到组件中,或者不想在深层嵌套的子项中传递它时,它将很有用。 1234567891011import React from 'react';import { Button } from 'react-na...
-
August 29, 2018【React Navigation】十二、自定义Android返回键的行为
在默认情况下,当用户点击返回键时,react-navigation将会返回上一级页面,或者直接退出程序(当没有上一级页面时)。这是默认的合理处理,但有些情形下我们可能希望自定义返回键的一些行为。 假如你正在查找一种简单的处理,可以直接导出社区开源的包:react-navigation-backhandler。在接下来的小节中,我们将会介绍这个包是如何实现返回键的自定义功能的 举个例子,在某个...
-
August 29, 2018【React Navigation】十一、导航器嵌套使用的一些注意事项
每个页面都可以配置来决定它在导航器中的呈现方式。在基础文档的配置标题栏部分,我们介绍了它的工作原理。 在本文档中,我们将会解释当有多个导航器一起使用时它是如何工作的。看完该章节,你将学习到如何将navigationOptions放在正确的位置,并确保可以正确的配置导航器。如果你把它们放在错误的地方,有可能什么都不会发生,但也可能会发生令人困惑和意外的事情。值得庆幸的是,以下的环节理解起来相对...
-
August 29, 2018【React Navigation】十、沉浸式状态栏
堆栈导航器和抽屉导航器下的沉浸状态栏在使用堆栈导航器和抽屉导航器下实现沉浸状态栏相对比较简单,你可以直接使用由React Native提供的StatusBar组件,并设置你的配置。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575...
-
August 29, 2018【React Navigation】九、createSwitchNavigator-身份认证流程
大部分应用在用户访问与用户相关的数据或者其他一些私有内容时,需要先进行身份验证。通常,流程将如下所示: 用户打开应用程序 该应用从数据存储层加载一些身份验证的状态(例如从AsyncStorage加载) 加载状态后,通过判断是否加载了有效的身份验证状态,来决定跳转到身份验证界面或者主应用界面 当用户注销时,我们清除身份验证状态,并返回到身份验证界面 配置我们的导航器123456789101...
-
August 29, 2018【React Navigation】八、createDrawerNavigator-抽屉导航器
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061import React from 'react';import { Text, View, Button, Image, StyleSh...
-
August 29, 2018【React Navigation】七、createTabNavigator-选项卡导航器
移动应用程序中最常见的导航风格可能是基于标签选项卡。这些选项卡可能放置在屏幕底部或标题下方。 本指南介绍createBottomTabNavigator的使用,另外,你还可以使用createMaterialBottomTabNavigator和createMaterialTopTabNavigator为应用程序添加选项卡。 选项卡导航条的小例子123456789101112131415161...
-
August 29, 2018【React Navigation】六、标题栏按钮
在标题栏增加按钮与标题交互的最常用方法是点击标题左侧或右侧的按钮。 让我们在标题的右侧添加一个按钮(在整个屏幕上最难触摸的地方之一,取决于手指和手机大小,但也是放置按钮的正常位置)。 123456789101112class HomeScreen extends React.Component { static navigationOptions = { head...
-
August 29, 2018【React Navigation】五、配置标题栏
设置标题栏标题屏幕组件可以包含一个名为navigationOptions 的静态属性,它既是一个对象也是一个方法,里边包含了各种的属性配置。我们可以通过它里边的title属性来设置标题栏标题 123456789101112131415class HomeScreen extends React.Component { static navigationOptions = ...
-
August 29, 2018【React Navigation】四、页面的参数传递
在前边几个环节,我们学会了如何创建一个包含多个页面的导航器,并且学习了如何在页面间跳转的方法。接下来,我们将在这个环节学习如何在跳转页面时,同时附带参数。这主要有两个步骤: 将多个参数封装成一个对象,并将它作为navigate函数的第二个参数 1this.props.navigation.navigate('RouteName', { /* params go...
-
August 29, 2018【React Navigation】三、屏幕切换
在上一个环节中,我们定义了一个包含了两个路由的堆栈导航器,但我们还没有实现让导航器从Home路由跳转到Details路由。(虽然我们确实学习了如何在我们的代码中更改初始路由,但是为了看到另外一个路由,需要我们的用户在代码中更改初始路由,这是一种糟糕的用户体验) 假如是浏览器,我们可以通过以下写法来达到页面跳转123<a href="details.html">...
-
August 29, 2018【React Navigation】二、createStackNavigator-堆栈导航器
在Web浏览器中,你可以通过()标签跳转到不同的页面。当用户单击某个链接时,当前的URL将保存到到浏览器历史记录堆栈。当用户按下后退按钮时,浏览器会从历史堆栈的顶部弹出上一个访问的URL,因此可以切换回到先前访问过的页面。 React Native没有像Web浏览器那样内置全局历史堆栈的功能。 而React Navigation则为您的应用提供了一种在屏幕切换和管理导航历史记录的方法。如果您...
-
August 29, 2018【React Navigation】一、环境配置
React Navigation是一个产生于React Native开源社区的导航解决方案,它允许用户使用纯JavaScript语言开发一个可扩展且易于使用的导航栏。 期望如果您已经熟悉React Native,那么您将能够快速使用React Navigation!否则,您可能需要首先阅读React Native Express的第1至4部分,然后再开始该部分内容的学习。 本文档的基础部分主...
-
August 25, 2018【React Navigation】写在前边
序该系列文章翻译自React Navigation官方文档: 目前没有翻译全部篇章,只是挑选了本人认为比较重要的文章 在原有的基础上加上了自己的理解 补全了原文提供的例子,所有代码都在本人电脑上运行测试通过 后续后续将补全所有的文章,并附上使用了React Navigation的完整例子。如果翻译不妥当,或者语句不顺,欢迎各位指正~