black

qml按钮样式设计,把样式写成组件

跟風遠走 提交于 2019-11-27 12:23:44
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_33200959/article/details/74932165 通过Button的style属性可以设置按钮的样式如下: style: ButtonStyle { //进行对Button的样式设置 background: Rectangle { //设置圆角 radius: 5; color: "red" border.width: control.pressed ? 2:1 } } 但是如果多个按钮同时用到,上面的方式显得烦琐,此时我们可以使用Component在QML文档内定义一个组件 设置其id为btnStyle然后在按钮设置样式时直接使用 import QtQuick 2.5 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") //组件 Component { id: btnStyle ButtonStyle { background:

DM 源码阅读系列文章(七)定制化数据同步功能的实现

て烟熏妆下的殇ゞ 提交于 2019-11-27 04:54:24
作者:王相 本文为 DM 源码阅读系列文章的第七篇,在 上篇文章 中我们介绍了 relay log 的实现,主要包括 relay log 目录结构定义、relay log 数据的处理流程、主从切换支持、relay log 的读取等逻辑。 本篇文章我们将会对 DM 的定制化数据同步功能进行详细的讲解。 在一般的数据同步中,上下游的数据是一一对应的,即上下游的库名、表名、列名以及每一列的值都是相同的,但是很多用户因为业务的原因希望 DM 在同步数据到 TiDB 时进行一些定制化的转化。下面我们将主要介绍数据同步定制化中的库表路由(Table routing)、黑白名单(Black & white table lists)、列值转化(Column mapping)、binlog 过滤(Binlog event filter)四个主要功能的实现。值得注意的是,由于其他一些工具(例如 TiDB Lightning 和 TiDB Binlog)也需要类似的功能,所以这四个功能都以 package 的形式维护在 tidb-tools 项目下,这样方便使用和维护。 库表路由( Table routing ) 库表路由顾名思义就是对库名和表名根据一定的路由规则进行转换。比如用户在上游多个 MySQL 实例或者 schema 有多个逻辑上相同的表,需要把这些表的数据同步到 TiDB 集群的同一个表中

ForkJoinPool源码解析(未写完,待补充)

╄→гoц情女王★ 提交于 2019-11-25 23:02:59
目录 ForkJoinPool介绍 什么是ForkJoinPool? 相对ThreadPoolExecutor有什么优缺点? 什么时候使用ForkJoinPool? 实例DEMO 涉及核心类或组件 ForkJoinPool ForkJoinTask ForkJoinWorkerThread WorkQueue 执行流程 执行流程 任务窃取 源码分析 添加任务 fork任务 join任务 补充部分 详情 1. ForkJoinPool介绍 1.1 什么是ForkJoinPool? ForkJoinPool是在JDK1.7新添加的一个JUC线程池工具类,它同样继承了AbstractExcutorService,如下图所示 在未开始介绍该类之前,我们先从字面意思猜想一下该类的左右:fork:分叉;join:参加、联合、连接;pool:小池;翻译:参加分叉的小池,或者连接分叉的小池。恩,,,这个翻译坑爹呀!!!! 不不不,不是这样的,咱们可以适当的加点猜想嘛,比如说在JUC中,一定与并发有关系,那么可否这么翻译呢? “一个将任务拆分并结果合并的线程池”。 1.2 相对ThreadPoolExecutor有什么优缺点? 从上文我们已经知道ForkJoinPool是一个线程池,那么他与咱们常用的 ThreadPoolExecutor 线程池有什么区别呢? 首先看下两个线程池的结构图:

Flutter 之 ListView

风流意气都作罢 提交于 2019-11-25 21:19:39
在 Flutter 中,ListView 可以沿一个方向(垂直或水平方向)来排列其所有子 Widget,常被用于需要展示一组连续视图元素的场景 ListView 构造方法 ListView:仅适用于列表中含有少量元素的场景 ListView.build:适用于子 Widget 比较多的场景 ListView.separated:适用于需要设置分割线的场景 构造方法名 特点 使用场景 ListView 一次性创建好所有子 Widget 适用于展示少量连续子 Widget 的场景 ListView.build 提供了子 Widget 创建方法,仅在需要展示时才创建 适用于子 Widget 较多,且视觉效果呈现某种规律性的场景 ListView.separated 提供了子 Widget 创建方法,仅在需要展示时才创建,且提供了自定义分割线的功能 适用于子 Widget 较多,且视觉效果呈现某种规律性、每个子 Widget 之间需要分割线的场景 ListView 可以通过设置 children 参数,将所有子 Widget 包含到 listView 中,但这种创建方法要求提前将所有子 Widget 一次性创建好,而不是等到真正需要在屏幕上显示时才创建,即这种方法是导致性能下降。因此,这种方式只适合列表中含有少量元素的场景 class List extends

(翻译)RabbitMQ Java Client教程(四)路由

梦想的初衷 提交于 2019-11-25 20:37:57
原文地址: https://www.rabbitmq.com/tutorials/tutorial-four-java.html 在前一篇教程中我们构建了一个日志系统。现在我们知道如何把日志消息广播发送给多个接受者了。 在本篇教程中我们将增加一个功能——允许订阅者只获取它感兴趣得一部分消息。比如我们仅把严重错误的日志存储到日志文件,而将所有的日志消息都打印到控制台。 绑定 在之前的章节中我们已经创建过交换器和队列的绑定。你可能还记得下边的代码: channel.queueBind(queueName, EXCHANGE_NAME, ""); 绑定表示交换器和队列之间的一种关系。这可以简单描述为:队列只对这个交换器的消息感兴趣。 绑定关系可以使用一个额外的==routingKey==参数。为了避免与==basic_publish==中的参数混淆,在这里我们叫它==binding key==。下边是我们使用一个key参数创建绑定关系的代码: channel.queueBind(queueName, EXCHANGE_NAME, "black"); binding key的作用于交换器的类型有关。我们之前使用的fanout交换器,会直接忽略该参数。 Direct 交换器 我们前一篇教程的日志系统会广播消息给所有的消费者。现在我们要扩展这个系统,使它可以根据消息的严重程度进行过滤