首页 > 其他分享 >布局

布局

时间:2023-08-27 18:33:26浏览次数:28  
标签:rootView win 布局 部件 FlexLayout 视图

NodeGui 使用布局系统自动排列小部件中的子小部件,以确保它们充分利用可用空间。

固定尺寸

小部件的高度和宽度决定了其在屏幕上的大小。设置小部件尺寸的最简单方法是向样式添加固定宽度和高度。对于应始终以完全相同的大小呈现的小部件,无论屏幕尺寸如何,这种方式设置尺寸都很常见。


const { QMainWindow, QWidget } = require("@nodegui/nodegui");

const win = new QMainWindow();
const view = new QWidget(win);

view.setInlineStyle("width:50px; height:30px; background-color: yellow;");

win.show();
(global as any).win = win;

动态布局

当小部件的可用空间量发生变化时,动态布局会自动定位小部件并调整其大小,从而确保它们排列一致,并且用户界面作为一个整体仍然可用。

NodeGui 目前支持以下布局:

  • 弹性布局
  • QBox布局
  • QGridLayout

随着时间的推移,将添加更多布局。您还可以通过为 NodeGui 创建自定义原生插件来使用自定义原生插件 API 自行添加布局。

弹性布局

使用 FlexLayout 让子项根据可用空间动态扩展和收缩。通常你会使用 ,它告诉一个小部件填满所有可用空间,在具有相同父级的其他小部件之间平均共享。给定的弯曲越大,组件与其同级组件相比占用的空间比就越高。flex: 1

仅当小部件的父构件的尺寸大于 0 时,构件才能展开以填充可用空间。如果父项没有固定的宽度和高度或弯曲,则父项的尺寸将为 0,并且弹性子项将不可见。

弹性框旨在在不同的屏幕尺寸上提供一致的布局。您通常会使用 flexDirection、alignItems 和 justifyContent 的组合来实现正确的布局。

例:

假设您要构建一个具有父视图的 UI,该父视图具有两个子小部件。一个是带有文本 Hello 的标签,另一个是背景颜色为白色的视图。现在,您希望标签占据可用空间的 1/3,而白色子视图占据剩余的 2/3 空间。

其代码如下所示:

let { QLabel, FlexLayout, QWidget, QMainWindow } = require("@nodegui/nodegui");

// 创建根视图并为其分配弹性布局。
const rootView = new QWidget();
rootView.setLayout(new FlexLayout());
rootView.setObjectName("rootView");

// 创建两个小部件 - 一个标签和一个视图
const label = new QLabel();
label.setText("Hello");
label.setObjectName("label");

const view = new QWidget();
view.setObjectName("view");

// 现在告诉 rootView 布局标签和其他视图是其子视图
rootView.layout.addWidget(label);
rootView.layout.addWidget(view);

//告诉 FlexLayout 你希望 rootView 的子项如何被平衡
rootView.setStyleSheet(`
  #rootView{
    flex: 1;
    background-color: blue;
  }
  #label {
   flex: 1;
   color: white;
   background-color: green;
  }
  #view {
    flex: 3;
    background-color: white;
  }
`);

const win = new QMainWindow();
win.setCentralWidget(rootView);
win.show();
global.win = win;

TLDR

  • 第一步是在父小部件上设置布局。您可以使用小部件的方法执行此操作。在这里,我们使用的是FlexLayout。setLayout

  • 要使布局正常工作,您必须让布局知道哪些小部件是子小部件,以及如何将它们放置在父小部件内的可用屏幕空间上。您可以使用布局的方法执行此操作。对于 FlexLayout,您将通过在父控件和子控件上设置 flex 属性来指定属性。addWidget

要深入了解 FlexBox 布局的工作原理,请访问:https://facebook.github.io/react-native/docs/0.60/flexbox

NodeGui 使用的库与 React Native 在 FlexBox(Yoga)下使用的库相同。

  • 您也可以通过内联样式指定布局属性。

结论

NodeGui 中的主要布局是 Flexbox 布局。弹性框布局可以通过样式表进行控制,就像在 Web 中一样。因此,绘制和布局属性在同一位置可用。

NodeGui还将尝试在Qt中支持其他可用的布局。但是,如果你需要一个Qt/NodeGui还不支持的特殊布局,你可以随时为NodeGui创建一个原生插件,并使用Qt的API创建一个。事实上,Qt并没有内置FlexLayout,FlexLayout实际上是在Yoga库的帮助下编写的自定义Qt布局。

标签:rootView,win,布局,部件,FlexLayout,视图
From: https://www.cnblogs.com/full-stack-linux-new/p/17660653.html

相关文章

  • 深度丨Serverless + AIGC,一场围绕加速创新的升维布局
    作者:褚杏娟上图来源于基于函数计算部署SD实现光影效果前言:Serverless在中国发展这些年,经历了高潮、低谷、现在重新回到大众视野。很多企业都非常感兴趣,部分企业开始大规模应用;也有一些企业对在生产环境真正落地跃跃欲试。同时,在当下AIGC技术浪潮中,Serverless如何与AIGC更好......
  • Forrester首次面向中国的开源报告:阿里云在云原生领域开源布局最全面
    Forrester于近期发布了《NavigateTheCloud-NativeEcosystemInChina,2023》,报告概述了中国云原生领域的开源项目对构建云原生生态的促进作用,这些开源项目正深刻影响着企业的技术决策者以何种策略拥抱云原生这一现代IT基础设施的核心。报告表明,中国超过80%的云决策者表......
  • 龙测科技初揭秘,一张图让你明白软件测试saas企业的功能布局
    大家好,和大家认识也挺久了,好像也没有做过自我介绍。择日不如撞日,今天我们就好好聊聊吧。自我介绍分为了两个部分,上半部分是龙测科技的由来、梦想以及目前的成就;下半部分是龙测目前的产品功能框架。对产品功能感兴趣的朋友们可以直接跳到下半部分。当然了,还是希望大家从头开始了解......
  • flex为1的时候,子元素限制一行时内容撑出父元素布局解决方案
    解决方法:1、在子元素的父级加overflow:hidden;2、在子元素的父级上加width:0;或者height:0;相关问题:当子元素是自适应父元素的情况下,但子元素大小超出了父元素,在低版本浏览器(我的是v85.0.4183.83)会出现宽度/高度自动无限增大的bug,将父元素无限撑大......
  • 掌握CSS布局技巧,打造响应式网页设计
    1.引言在当今互联网时代,响应式网页设计已经成为了一种必备的技能。随着移动设备的普及和多样化,用户对于网页的访问方式也越来越多样化。因此,我们需要掌握CSS布局技巧,以便能够打造出适应不同设备和屏幕尺寸的响应式网页设计。2.CSS布局技巧2.1媒体查询媒体查询是CSS3中的一个......
  • iOS开发之--Masonry多个平均布局
    使用Masonry平均布局,代码如下:其实就是用Masonry提供的两个方法,如下:/***distributewithfixedspacing**@paramaxisType横排还是竖排*@paramfixedSpacing两个控件间隔*@paramleadSpacing第一个控件与边缘的间隔*@paramtailSpa......
  • ElementUI中使用<el-row>自适应布局导致显示错乱
     错乱代码(部分):<el-row:gutter="5"><el-col:xs="24":sm="12":md="8":lg="6"v-for="(item,index)incaseList":key="index"> <img:src="baseUrl+item......
  • 首度公布全栈智能布局,联想加速智能化转型迈向“AI新时代”
    算领新产业潮流,力赋高质量发展。8月18日,被誉为中国算力产业领域权威信息策源地、产业趋势风向标的2023中国算力大会在宁夏银川盛大开幕。作为全球最大的算力基础设施和服务提供商,联想集团受邀参展此次大会。联想集团执行副总裁兼中国区总裁刘军出席大会开幕式和主论坛并发表主题演......
  • 网格布局管理器
    AWT布局管理器有五种:流布局管理器(FlowLayout)、网格布局管理器(GridLayout)、边界布局管理器(BorderLayout)、卡片布局管理器(CradLayout)、网格包布局管理器(GridBagLayout)参考:https://www.cnblogs.com/wzy330782/p/5427968.html......
  • flex布局
    flex布局原理flex是flexibleBox的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。当我们为父盒子设为flex布局以后,子元素的float、clear和vertical-align属性将失效。flex布局又叫伸缩布局、弹性布局、伸缩盒布局、......