版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://www.cnblogs.com/lihuidashen/p/11539755.html

https://mp.weixin.qq.com/s/b-DK1ndudiPtyFpbE8lseQ

效果视频

软件结构

现在开始讲一下源码吧

重点:anchors锚布局

Discover
{
    id: discover
    anchors.fill: parent//填充满父项
}

QML的布局方式一般采用两种,一种就是直接设置X与Y坐标的值。一种是采用相对位置布局,anchors锚布局,使用锚布局能够使界面更紧凑,更有整体化,我们将这种机制成为锚点(anchor)。锚点允许我们灵活地设置两个元素的相对位置。它使两个元素之间形成一种类似于锚的关系,也就是两个元素之间形成一个固定点。

锚点的行为类似于一种链接,它要比单纯地计算坐标改变更强。由于锚点描述的是相对位置,所以在使用锚点时,我们必须指定两个元素,声明其中一个元素相对于另外一个元素。锚点是Item元素的基本属性之一,因而适用于所有 QML 可视元素。

用锚定位

除了更传统的网格,行和列之外,Qt Quick还提供了一种使用锚点概念布局项目的方法。每个项目可以被认为具有一组7个不可见的“锚线”:left,horizontalCenter,right,top,verticalCenter,baseline和bottom。

基线(上图未显示)对应于文本所在的虚线。对于没有文字的项目,它与顶部相同。Qt快速锚定系统允许您定义不同项目的锚线之间的关系。

用法有如下,这里不一一介绍。

anchors.baseline : AnchorLine
anchors.baselineOffset : real
anchors.bottom : AnchorLine
anchors.bottomMargin : real
anchors.centerIn : Item
anchors.fill : Item
anchors.horizontalCenter : AnchorLine
anchors.horizontalCenterOffset : real
anchors.left : AnchorLine
anchors.leftMargin : real
anchors.margins : real
anchors.mirrored : bool
anchors.right : AnchorLine
anchors.rightMargin : real
anchors.top : AnchorLine
anchors.topMargin : realanchors.verticalCenter : AnchorLine
anchors.verticalCenterOffset : real

看看这个demo的程序吧,放一些固定的定位节点,将此设定在坐标下

property , ), Qt.point(, ),
                         Qt.point(, ), Qt.point(, ),
                         Qt.point(, )]

定位节点如图所示

将其画出来,这里在Qt 纯属娱乐-绘制一个模拟时钟 讲过,大家可以参考一下。

function drawLine(ctx, color, width, startX, startY, endX, endY) {
    ctx.strokeStyle = color;
    ctx.lineWidth = width;
    ctx.beginPath();
    ctx.moveTo(startX, startY);
    ctx.lineTo(endX, endY);
    ctx.closePath();
    ctx.stroke();
}

绘制图像

//绘制网格竖线
; i < width; i += )
    drawLine(ctx, , i + 0.5, height);
//绘制网格横线
; j < height; j += )
    drawLine(ctx, , j + 0.5, width, j + 0.5);

//绘制地图标记
positions.forEach(function(point, i) {
    ctx.drawImage("qrc:/images/map_marker.ico", point.x, point.y);
});
绘制扫描圆,这个算是精髓吧
; k < ; k += 0.5) {
    ctx.beginPath();
    ctx.arc(halfWidth, halfHeight, r1 + k, , Math.PI * );
    ctx.closePath();
    ctx.stroke();

    ctx.beginPath();
    , Math.PI * );
    ctx.closePath();
    ctx.stroke();
}

最后,点击("scan") 开始定时画扫描圆,就出现这个画面了,还是有点炫酷的.

推荐阅读

(点击标题可跳转阅读)

Qt 学习笔记-强势入门

Qt 学习笔记-Qt中添加背景图片的方法

Qt 学习笔记-处理鼠标响应事件

Qt 纯属娱乐-绘制一个模拟时钟

Qt 学习笔记-中秋节,QPainter画一颗小心心送给你

Qt 纯属娱乐-模拟一个导航定位系统的更多相关文章

  1. Qt 模拟一个导航定位系统

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/115397 ...

  2. 自定义模拟一个Spring IOC容器

    一.模拟一个IOC容器: 介绍:现在,我们准备使用一个java project来模拟一个spring的IOC容器创建对象的方法,也就是不使用spring的jar自动帮助我们创建对象,而是通过自己手动书 ...

  3. 使用LinkedList模拟一个堆栈或者队列数据结构

    使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出  如同一个杯子. 队列:先进先出  如同一个水管. import java.util.LinkedList; public cl ...

  4. scala模拟一个timer

    直接上代码: package com.test.scalaw.test.demo import java.util.Date /** * 模拟一个定时timer */ object Timer { d ...

  5. 使用 ViewPager 和 RadioGroup 封装的一个导航控件

    import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.dra ...

  6. C# 模拟一个处理消息队列的线程类 Message Queue

    // 模拟一个处理消息队列的类 class MessageHandler { // 消息队列 private Queue<string> messageQue = new Queue< ...

  7. qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新

    qt widget设置Qt::FramelessWindowHint和Qt::WA_TranslucentBackground, 会出现一个bug: 在最小化后还原时界面停止刷新 Widget wit ...

  8. java集合 collection-list-LinkedList 模拟一个堆栈或者队列数据结构。

    /* 使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出 如同一个杯子. 队列:先进先出 First in First out FIFO 如同一个水管. */ import jav ...

  9. 使用TabLayout快速实现一个导航栏

    在没有Material Design的年代,要实现一个类似微信主页面的效果,我们有以下几种解决方案: 1.Fragment + ViewPager  +  RadioGroup自定义固定导航条 2.F ...

随机推荐

  1. 【0729 | Day 3】Python基础(一)

    Part 1 变量 一.什么是变量? 字面意思:变化的量. 而在计算机中,我们可以将它理解为世间万物变化的状态. 二.为什么要有变量? 首先,无论是我们还是计算机都需要变量来记录发生的状态的变化,其次 ...

  2. exe4j打包--exe转安装包

    前面一篇已经详细的说明了打包成exe的步骤了,下面谈谈exe如何压缩成安装文件.这里用到之前的另外一个软件,具体软件看这篇文章 exe4j打包成exe 打开inno 编辑器 打开软件后我们选择 用[脚 ...

  3. TensorFlow Data模块

    模块作用 tf.data api用于创建训练前导入数据和数据处理的pipeline,使得处理大规模数据,不同数据格式和复杂数据处理变的容易. 基本抽象 提供了两种基本抽象:Dataset和Iterat ...

  4. 从MYSQL的ibtmp1文件太大说起

    1.  啥情况呀 测试环境机器磁盘空间不足的告警打破了下午的沉寂,一群人开始忙活着删数据.但是,不久前刚清理了一波数据,测试环境在没做压测的情况下不至于短短一个月不到就涨了200G数据,于是,我悄悄的 ...

  5. 5 X 5 方阵引出的寻路算法 之 路径遍历(完结)

      此篇文章源自对一个有趣问题的思考,在我的另一篇博文<一个有趣的 5 X 5 方阵一笔画问题>中有详细介绍.在已知其结论的情况下,作为程序员的我,还是想利用该问题当做出发点,写一个可以遍 ...

  6. 盘一盘 NIO (一)—— Buffer源码解析

    Buffer是个啥? Buffer 即缓冲区,用来暂存输入输出数据的区域.Buffer对象是一份固定数量的数据的容器,实质上是一个数组.但是一个缓冲区不仅仅是一个数组,缓冲区提供了对数据的结构化访问, ...

  7. 纯数据结构Java实现(4/11)(BST)

    个人感觉,BST(二叉查找树)应该是众多常见树的爸爸,而不是弟弟,尽管相比较而言,它比较简单. 二叉树基础 理论定义,代码定义,满,完全等定义 不同于线性结构,树结构用于存储的话,通常操作效率更高.就 ...

  8. 搭建本地的idea激活服务器

    前言        博主用的是idea这个IDE,因为最近idea官方打击第三方激活服务有些严重,所以我的idea经常处于今天可以用,到了明天就不能用的状态,所以,从idea激活的网站找到了本地的id ...

  9. SpringBoot与Shiro整合权限管理实战

    SpringBoot与Shiro整合权限管理实战 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] *观看本文章需要有一定SpringBoot整合经验* Shiro框架简介 Apach ...

  10. c++智能指针介绍

    C++11标准引入了boost库中的智能指针,给C++开发时的内存管理提供了极大的方便.接下来这篇文件介绍shared_ptr/weak_ptr内部实现原理及使用细节. C++不像java有内存回收机 ...