qml : qml控件自适应;
import QtQuick 2.4 Item { property var targetItem: parent property bool fixedAspectRatio: true // Else zoom from width and height property bool accordingToX: true // Else according to center property var targetItemGeometry property var childrenItemGeometry property bool isBegin: false function begin() { targetItemGeometry = new Object; targetItemGeometry["width"] = targetItem.width; targetItemGeometry["height"] = targetItem.height; var children = targetItem.children; var data = new Array; for(var index = 1; index < children.length; index++) { var currentItem = children[index]; var buf = new Object; buf["item"] = currentItem; buf["x"] = currentItem.x; buf["y"] = currentItem.y; buf["centerX"] = currentItem.x + (currentItem.width / 2); buf["centerY"] = currentItem.y + (currentItem.height / 2); buf["width"] = currentItem.width; buf["height"] = currentItem.height; data.push(buf); } childrenItemGeometry = data; isBegin = true; } function resize() { if(isBegin) { var horizontalRatio, verticalRatio; horizontalRatio = targetItem.width / targetItemGeometry["width"]; verticalRatio = targetItem.height / targetItemGeometry["height"]; for(var index = 0; index < childrenItemGeometry.length; index++) { if(fixedAspectRatio) { if(horizontalRatio > verticalRatio) { childrenItemGeometry[index]["item"].width = childrenItemGeometry[index]["width"] * verticalRatio; childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * verticalRatio; } else { childrenItemGeometry[index]["item"].width = childrenItemGeometry[index]["width"] * horizontalRatio; childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * horizontalRatio; } } else { childrenItemGeometry[index]["item"].width = childrenItemGeometry[index]["width"] * horizontalRatio; childrenItemGeometry[index]["item"].height = childrenItemGeometry[index]["height"] * verticalRatio; } if(accordingToX) { childrenItemGeometry[index]["item"].x = childrenItemGeometry[index]["x"] * horizontalRatio; childrenItemGeometry[index]["item"].y = childrenItemGeometry[index]["y"] * verticalRatio; } else { childrenItemGeometry[index]["item"].x = childrenItemGeometry[index]["centerX"] * horizontalRatio - (childrenItemGeometry[index]["item"].width / 2); childrenItemGeometry[index]["item"].y = childrenItemGeometry[index]["centerY"] * verticalRatio - (childrenItemGeometry[index]["item"].height / 2); } } } } Component.onCompleted: { begin(); } Component { id: connections Connections { target: targetItem onWidthChanged: { resize(); } onHeightChanged: { resize(); } } } Loader { Component.onCompleted: { sourceComponent = connections; } } }
qml : qml控件自适应;的更多相关文章
- 【IOS界面布局】横竖屏切换和控件自适应(推荐)
[IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改 ...
- C# WinForm窗体及其控件自适应各种屏幕分辨率
C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明 我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...
- C# Winform窗体和控件自适应大小
1.在项目中创建类AutoSizeForm AutoSizeForm.cs文件代码: using System; using System.Collections.Generic; using Sys ...
- QML常用控件
这里的控件是显示的元素 1.Item:一切的基类 Item { Image { source: "tile.png" } Image { x: width: height: sou ...
- Winfon 页签切换及窗体控件自适应
由于公司的业务调整,最近不仅开发bs,还有不熟悉的cs,人手也不足,项目还多,对于cs来说,算是小白,虽然是一个人,也是硬着头皮写,拖拽控件,自定义控件.一个项目下来,对cs有了很深的认识,这里好好感 ...
- Winform窗体控件自适应大小
自己写的winform窗体自适应大小代码,代码比较独立,很适合贴来贴去不会对原有程序造成影响,可以直接继承此类或者把代码复制到自己的代码里面直接使用 借鉴了网上的一些资料,最后采用重写WndProc方 ...
- C#(winform)实现不同DPI控件自适应1
1. PicBox控件 顺便一提关键字:stretch [stretʃ] vt. 伸展,张开 //控制pictureBox图片的显示格式 this.picClose.BackgroundImageLa ...
- MFC的停靠窗口中插入对话框,在对话框中添加控件并做控件自适应
单文档程序添加了停靠窗口后,可能会在停靠窗口中添加一些控件.在这里我的做法是在对话框上添加控件并布局,然后将这个对话框插入到停靠窗口中. 步骤 1.插入对话框,在对话框中放入控件(我的为树形控件),并 ...
- 【2017-12-06】winfrom 窗体自启最大化,控件自适应
先将窗体windowstate属性设置为Maximized public partial class Form1 : Form { public Form1() { InitializeCompone ...
随机推荐
- 关于MongoDB数据库的日志解析
MongoDB日志记录了数据库实例的健康状态.语句的执行状况.资源的消耗情况,所以日志对于分析数据库服务和性能优化很有帮助. 因此,很有必要花费一些时间来学习解析一下MongoDB的日志文件. 日志信 ...
- 写入Log错误日志
第一步创建ApplicationLog类 代码: using System;using System.Collections.Generic;using System.Linq;using Syste ...
- Session, Token, OAuth 鉴权那些事儿
鉴权那些事 整体思路 无论什么样的服务, Web 服务总是不能绕开鉴权这个话题的, 通过有效的鉴权手段来保护网站数据, 来为特定用户提供服务. 整体来说, 有三种方式: Session-Cookie ...
- Ubuntu忘记密码后强制修改密码
环境:Ubuntu 16.04 由于很久不用我的Ubuntu系统导致密码忘记,就想着应该有什么办法可以强制修改root密码,就上百度找了一下,果然Ubuntu有办法强制修改root密码. 在这里要谢谢 ...
- SQLServer之触发器简介
触发器定义 触发器是数据库服务器中发生事件时自动执行的一种特殊存储过程.SQLServer允许为任何特定语句创建多个触发器.它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对数据库进行操作 ...
- [经验总结] 从其它sheet页引用数据生成图表时没有图例的解决办法
1.先给出一个在有数据区域的sheet页中生成的图表,比较全,图表和图例全部都有,如下图: 2.但是如果在其它 sheet页中引用该有数据的sheet数据时并生成图表,生成的图表只有图表区域显示,图例 ...
- 日志学习系列(四)——NLog实例
具体不想介绍了,新建一个解决方案 ,直接用NuGet安装就行了 具体项目代码可以在https://github.com/qiuxianhu/SimpleNLog下载
- HttpServletResponse简单理解
Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,从客户端取数据用HttpServletRequest,向客户端 ...
- CentOS 7 软件安装简记
Install SW Record ================= $ sudo yum install vim-X11.x86_64 $ sudo yum install clang.x86_6 ...
- C#多线程与并行编程方面的电子书,中英文版本
给大家共享一些C#多线程与并行编程方面的电子书,中英文版本的. 链接: 百度网盘地址 提取码: y99a