-
2021-06-02 14:51:13
我有一个ImageView和一个ImageButton.我们让他们在一个水平的布局旁边彼此相邻.我正在努力使图像在屏幕上保持对齐,并且按钮对齐.我已经尝试设置重力,但它似乎没有什么不同.我哪里错了?
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_weight="1"
android:gravity="left"
android:src="@drawable/short_logo" />
android:id="@+id/terminateSeed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:background="@null"
android:src="@drawable/unregister_icon" />
更多相关内容 -
在ul中使li水平布局的两种方法
2020-09-25 06:51:32li水平布局在实际中使用的比较广泛,实现方法也有很多,下面为大家介绍下比较实现的几种方法,有此需求的朋友可以参考下,希望对大家有所帮助 -
QT入门之布局 水平布局、垂直布局、表单布局、网格布局
2021-09-16 10:15:092 QVBoxLayout 垂直布局 QVBoxLayout 其中的 “V” 就是单词 vertical 的简写,垂直的意思,就是该布局中的组件都是垂直方向排列的。 简单示例: int main(int argc, char *argv[]) { QApplication a(argc, argv); ...布局
1 简介
布局主要是用来管理多个组件如何排列的。如果没有布局的话,我们可能需要给每个组件都设置一下在界面中的位置,这样就比较麻烦了。有了布局,我们就可以将一些组件放在一个布局中,通过布局去管理各个组件的位置,我们就只需要给布局设置在界面中的位置即可。
在 QT 中一共有 5 种布局,他们的继承关系如下图:
此图来源于博客:QT 的QLayout布局属性2 QVBoxLayout 垂直布局
QVBoxLayout 其中的 “V” 就是单词 vertical 的简写,垂直的意思,就是该布局中的组件都是垂直方向排列的。
简单示例:int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; QVBoxLayout layout; QPushButton btn1("btn1",&w);//创建 3 个按钮 QPushButton btn2("btn2",&w); QPushButton btn3("btn3",&w); layout.addWidget(&btn1);//将按钮添加到布局管理器中 layout.addWidget(&btn2); layout.addWidget(&btn3); w.setLayout(&layout);//设置当前界面(widget)的布局管理器 w.show(); return a.exec(); }
如上图所示,3 个按钮就按垂直方向显示在了界面上。3 QHBoxLayout 水平布局
水平布局与垂直布局相反,其中的各个组件按照水平方向进行排列。
简单示例:int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; QHBoxLayout layout; QPushButton btn1("btn1",&w);//创建 3 个按钮 QPushButton btn2("btn2",&w); QPushButton btn3("btn3",&w); layout.addWidget(&btn1);//将按钮添加到布局管理器中 layout.addWidget(&btn2); layout.addWidget(&btn3); w.setLayout(&layout);//设置当前界面(widget)的布局管理器 w.show(); return a.exec(); }
4 常用函数
4.1 setSpacing()
该方法用于设置布局容器中各个组件的距离。
layout.setSpacing(50);
我们将前面的水平布局的距离的 layout 设置 spacing 为 50 :
可以看到,三个按钮之间的距离变长了。4.2 addSpacing()
该方法不要与 setSpacing() 方法混淆了,addSpacing() 用于在布局容器的任意位置加上指定大小的区域。
layout.addWidget(&btn1);//将按钮添加到布局管理器中 layout.addWidget(&btn2); layout.addSpacing(50); layout.addWidget(&btn3);
上述代码表示在 btn2 和 btn3 之间增加 50 单位的区域:
4.3 setStretch ( int index, int stretch ) 设置拉伸比例
该函数用于设置布局容器中某个组件的拉伸比例。
index:容器中某个组件的下标
stretch:拉伸比例int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; QHBoxLayout layout; QPushButton btn1("btn1",&w);//创建 3 个按钮 QPushButton btn2("btn2",&w); QPushButton btn3("btn3",&w); layout.addWidget(&btn1);//将按钮添加到布局管理器中 layout.addWidget(&btn2); layout.addWidget(&btn3); //设置拉伸比例 layout.setStretch(0,2);//btn1 拉伸比例设置为 2 layout.setStretch(1,2);//btn2 拉伸比例设置为 2 layout.setStretch(2,1);//btn3 拉伸比例设置为 1 w.setLayout(&layout);//设置当前界面(widget)的布局管理器 w.show(); return a.exec(); }
运行程序后,我们稍微调整一下窗口大小,如上图所示,btn1 和 btn2 都变大了,btn3 没有变化,但是 btn1 与 btn2 并没有变成 btn3 的 2 倍,因为此时的窗口大小还不足以显示 btn1 、btn2 扩大两倍后的情形。当我们再次调整窗口大小:
此时 btn1 与 btn2 差不多有 btn3 的两倍大了。如果我们再将窗口调大:
btn3 也变大了。整个过程中,btn1(btn2) 与 btn3 的大小比例一介于 btn3 <= btn1 <=2btn3。setStretch ( int index, int stretch ) 方法还有两个类似的方法:
//设置部件拉伸系数,如果*widget存在,则设置成功,返回true bool QBoxLayout::setStretchFactor ( QWidget * widget, int stretch ); //设置子布局拉伸系数,如果*layout存在,则设置成功,返回true bool QBoxLayout::setStretchFactor ( QLayout * layout, int stretch );
layout.addWidget(&btn1);//将按钮添加到布局管理器中 layout.addWidget(&btn2); layout.addWidget(&btn3); layout.setStretchFactor(&btn1,2); layout.setStretchFactor(&btn2,2); layout.setStretchFactor(&btn3,1);
该段代码运行后的效果与前面的示例一致。
4.4 setContentsMargins(int left, int top, int right, int bottom)
该函数用于设置布局容器中组件到容器的 4 个方向的距离。
layout.setContentsMargins(50,100,70,200);
5 QFormLayout 表单布局
该布局可以快速的帮我们完成一个表单界面,如下图:
这个布局比较简单,直接上代码:int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; QFormLayout layout; QLineEdit* text1 = new QLineEdit(); QLineEdit* text2 = new QLineEdit(); QLineEdit* text3 = new QLineEdit(); layout.addRow("Name:",text1); layout.addRow("Email:",text2); layout.addRow("Adress:",text3); layout.setSpacing(10); layout.setLabelAlignment(Qt::AlignRight);//设置标签的对齐方式 w.setLayout(&layout);//设置当前界面(widget)的布局管理器 w.show(); return a.exec(); }
6 QGridLayout 网格布局
该布局将布局区域划分成很多个小格子,其中的组件占一个或多个格子。
常用函数:
//表示将 widget 放在网格的第几行第几列 void addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 ); //表示将 widget 放在网格的第几行第几列 , rowSpan 表示该组件占几行,columnSpan 表示该组件占几列 void addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 ); //设置第几列的拉伸系数 void setColumnStretch(int column,int stretch); //设置第几行的拉伸系数 void setRowStretch(int row,int stretch);
简单示例:
int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; QGridLayout layout; QPushButton btn1("btn1",&w); QPushButton btn2("btn2",&w); QPushButton btn3("btn3",&w); QPushButton btn4("btn4",&w); QPushButton btn5("btn5",&w); QPushButton btn6("btn6",&w); layout.addWidget(&btn1,0,0,1,2);//第一行,第一列,占一行两列 layout.addWidget(&btn2,1,0,1,1);//第二行,第一列,占一行一列 layout.addWidget(&btn3,1,1);//第二行,第二列,占一行一列 layout.addWidget(&btn4,2,0,2,3);//第三行,第一列,占两行三列 //由于 btn4 占了两行,所以后面的要从第五行开始 layout.addWidget(&btn5,4,0,1,2);//第五行,第一列,占一行两列 //由于 btn5 占了两列,所以 btn6 要从三列开始 layout.addWidget(&btn6,4,2,1,1);//第五行,第三列,占一行一列 w.setLayout(&layout);//设置当前界面(widget)的布局管理器 w.show(); return a.exec(); }
使用网格布局时需要注意的是,当前添加的 widget 所在的行和列位置,例如前面的 btn6 的列应该设置为 2 而不是 1。7 布局嵌套
布局嵌套就是指一个布局可以嵌套在另一个布局中,比如网格布局的某一行某一列可以设置为一个水平布局。
我们以前面的例子做一个简单示例,将一个水平布局作为界面的主布局,然后将前面表单示例代码与网格布局的示例代码都设置到这个水平布局上。
int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; QHBoxLayout hlayout;//主布局 QGridLayout gridLayout; QPushButton btn1("btn1",&w); QPushButton btn2("btn2",&w); QPushButton btn3("btn3",&w); QPushButton btn4("btn4",&w); QPushButton btn5("btn5",&w); QPushButton btn6("btn6",&w); gridLayout.addWidget(&btn1,0,2,1,2); gridLayout.addWidget(&btn2,1,0,1,1); gridLayout.addWidget(&btn3,1,1); gridLayout.addWidget(&btn4,2,0,2,3); gridLayout.addWidget(&btn5,4,0,1,2); gridLayout.addWidget(&btn6,4,2,1,1); QFormLayout formLayout; QLineEdit* text1 = new QLineEdit(); QLineEdit* text2 = new QLineEdit(); QLineEdit* text3 = new QLineEdit(); formLayout.addRow("Name:",text1); formLayout.addRow("Email:",text2); formLayout.addRow("Adress:",text3); //将表单布局、网格布局作为子布局添加到主布局中 hlayout.addLayout(&formLayout); hlayout.addLayout(&gridLayout); w.setLayout(&hlayout);//设置当前界面(widget)的布局管理器 w.show(); return a.exec(); }
布局的嵌套是很随意的,可以无限的套娃。不过表单布局没有子布局,它只有 addRow()。 -
andriod: 线性布局中的垂直于水平布局问题
2021-06-03 05:26:591.线性布局--- LinearLayout:LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为...1.
线性布局--- LinearLayout:
LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical“
-------------垂直布局
android:orientation="horizontal"
-------------水平布局
android:gravity="center | center_horizontal | center_vertical" >---------能控制居中,选一个就行
LinearLayout还支持为其包含的widget或者是container指定填充权值。好处就是允许其包含的widget或者是container可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串widgets或者是containers挤成一堆的情况,而是允许他们放大填充空白。剩余的空间会按这些widgets或者是containers指定的权值比例分配屏幕。默认的 weight 值为0,表示按照widgets或者是containers实际大小来显示,若高于0的值,则将Container剩余可用空间分割,分割大小具体取决于每一个widget或者是container的layout_weight及该权值在所有widgets或者是containers中的比例。例如,如果有三个文本框,其中两个指定的权值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大,按实际大小来显示。如果前两个文本框的取值一个为2,一个为1,显示第三个文本框后剩余的空间的2/3给权值为2的,1/3大小给权值为1的。也就是权值越大,重要度越大。
android:layout_weight="1"
如果LinearLayout包含子LinearLayout,子LinearLayout之间的权值越大的,重要度则越小。如果有LinearLayout A包含LinearLayout C,D,C的权值为2,D的权值为1,则屏幕的2/3空间分给权值为1的D,1/3分给权值为2的C。在LinearLayout嵌套的情况下,子LinearLayout必须要设置权值,否则默认的情况是未设置权值的子LinearLayout占据整个屏幕
2.线性布局的嵌套:在垂直布局中嵌套水平布局
-
Qt水平布局,垂直布局和嵌套布局 layout
2021-02-26 16:08:54Qt中有水平布局:QHBoxLayout 垂直布局:QVBoxLayout 现在我们有这样一个需求,我们希望有三个按钮总在窗口的最左上角,无论窗口怎么拉伸或拖拽,按钮的位置都不动。那么我们就需要用到两个 layout 嵌套了。 大致...布局是一个软件质量重要的一方面,体现了软件设计的水平,一个好的软件必然有个好的布局。
Qt中有水平布局:QHBoxLayout
垂直布局:QVBoxLayout
现在我们有这样一个需求,我们希望有三个按钮总在窗口的最左上角,无论窗口怎么拉伸或拖拽,按钮的位置都不动。那么我们就需要用到两个 layout 嵌套了。
大致的思路是在一个垂直的 layout 中嵌套一个水平的 layout,在水平的 layout 右侧设置一个弹簧,在垂直的 layout 下方设置一个弹簧,这样按钮就会一直在左上角了,表示图如下:
一个表示垂直布局,一个表示水平布局
实现代码如下:
myLayout::myLayout(QWidget *parent) : QWidget(parent), ui(new Ui::myLayout) { ui->setupUi(this); // 垂直 Layout QVBoxLayout* mainLayout = new QVBoxLayout(this); // 水平 Layout QHBoxLayout* layout = new QHBoxLayout; // 水平 Layout 增加控件 layout->addWidget(new QPushButton("button1")); layout->addWidget(new QPushButton("button2")); layout->addWidget(new QPushButton("button3")); // 水平 Layout 增加弹簧 layout->addStretch(1); // 将水平 Layout 添加到垂直 Layout mainLayout->addLayout(layout); // 设置垂直 Layout 弹簧 mainLayout->addStretch(1); }
-
QT 网格布局 水平布局 垂直布局
2018-04-09 19:56:27QT水平布局:头文件<QHBoxLayout>#include <QApplication>#include <QWidget>#include <QPushButton>#include <QLineEdit>#include <... -
微信小程序开发:水平排列布局与滚动视图(scroll-view)
2021-03-29 20:05:41一:水平排列布局 小程序的布局和React Native的布局类似,采用了弹性布局的方法。也就是说,分为水平和垂直布局。默认是从左向右水平依次放置组件,从上到下依次放置组件。 wxml文件用于放置参与布局的组件,为了更... -
css水平布局与垂直布局
2020-03-22 11:10:49水平布局 盒子模型水平方向的布局 宽度为父类的全部宽度 水平方向盒子由以下几个自属性构成: 外边距左 + 边框左 + 内边距左 + 内容 + 内边距右 + 边框右 + 外边距右 = 父类全部宽度 当上面等式不不足时,则称为:... -
Qt布局管理器之水平布局和垂直布局(QBoxLayout)
2019-08-13 15:42:51Qt的标准布局包括水平布局、垂直布局、网格布局、表单布局,水平布局中的所有子控件中心轴在一条水平直线上,垂直布局中的所有子控件中心轴在一条垂直直线上,网格布局用来在网格中布局子控件,表单布局常用来做表单... -
PyQt5 表单布局+垂直布局+水平布局综合使用
2019-08-26 17:28:47PyQt5布局有垂直布局(控件从上到下排列),水平布局(控件从左到右排列),表单布局(将两个空间对应一起布局)等布局,本实例通过创建QFormLayout布局将QLabel(标签)和QLineEdit(行编辑器)一一对应起来,label1对应lineEdit1... -
jQuery水平布局软件版本更新信息时间轴代码
2020-06-10 07:07:54jQuery水平布局软件版本更新信息时间轴代码是一款以圆形风格样式水平线性布局的网页时间轴代码,还可以用于记录企业大事记等信息。 -
ios 水平布局LAyput
2018-01-12 13:44:57ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平布局ios 水平... -
QT垂直布局和水平布局
2018-03-30 00:41:27QHBoxLayout:水平布局,在水平方向上排列控件。 QVBoxLayout:垂直布局,在垂直方向上排列控件。 同时我们注意到水平布局、垂直布局除了构造时的方向(LeftToRight、TopToBottom)不同外,其它均相同。2.示例... -
水平布局的HTML表单
2018-02-23 22:00:54水平布局的表单对于非常简短的表单,用户要填写的内容比较少,CSS 表单本身也不会占用太多空间,比如网站顶端的快捷登录表单,它只包含用户名、密码和登录按钮:<form action="" method="post... -
Qt 水平布局(QHBoxLayout)
2018-08-27 15:57:16Qt 水平布局(QHBoxLayout) 以前我是什么界面都是 托控件,现在开始学习撸代码写界面(技多不压身吗) QHBoxLayout: 在水平的方向上排列控件 左右排列 简单例子: QHBoxLayout* pLayout = new QHBoxLayout();//... -
QT网格布局,水平布局,垂直布局设计代码讲解
2017-06-09 09:43:38QT水平布局:头文件 #include #include #include #include #include int main(int argc, char *argv[]) { QApplication app(argc,argv); QWidget w; w.setWindowTitle("YEDI"); QPushButton -
flex 实现水平布局 三等分
2021-05-24 10:52:28.box{ display:flex; flex-direction:column; justify-content:space-between; align-items:center } 对应的html 如下: <div class="box"> <div>已售<div> <.... -
H5 中让div水平布局两边对齐的三种实现方法
2021-01-25 23:30:03本文主要介绍了div水平布局两边对齐的三种实现方法,分享给大家,具体如下: 方法一 父容器div使用 position: relative;,子div使用 position:absolute;定位,注意边距问题 html <div class="div-container"> ... -
【pyqt5】课时10.在QtDesigner中同时使用水平布局和垂直布局【pyqt5课程系列】
2020-05-03 18:31:46这里的视频有点乱序,按我的这个来 https://www.bilibili.com/video/BV154411n79k?p=10 代码 效果如下: -
gtk水平布局
2015-07-25 10:36:13用C语言实现的gtk水平布局,在linux环境下用gcc编译,可直接运行 -
三、解决“使用分裂器水平布局”之后,组件无法填充整个工作区的问题
2020-01-01 14:34:22在选择两个组件后,单机主窗口工具栏上的“使用分裂器水平布局”按钮,就可以为这两个组件创建一个水平分割的布局组件 spiltter,但是 splitter 无法填充整个工作区,如下例: 2、解决办法 在主窗口构造函数里使用... -
Flutter进阶—垂直和水平布局
2017-04-27 12:16:17垂直和水平布局垂直或水平排列控件是最常见的布局模式之一,您可以使用Row(行)控件来水平排列子控件,还可以使用Column(列)控件垂直排列子控件。要在Flutter中创建行或列,您可以将一个子控件列表添加到Row或... -
QML下的布局(垂直,水平,网格)
2019-01-17 16:13:22QML 还提供了另外一种用于布局的机制。我们将这种机制成为锚点(anchor)。锚点允许我们灵活地设置两个元素的相对位置。它使两个元素之间形成一种类似于锚的关系,也就是两个元素之间形成一个固定点。锚点的行为类似... -
水平和垂直方向布局效果
2021-04-03 10:02:28水平和垂直方向布局效果,源码DHLayout,实现简单的水平和垂直方向布局,配合xib使用非常方便。如果你的代码中还没有使用自动布局,那么你肯定会喜欢它的。 -
React Native 中的 Flex Box 的用法(水平布局、垂直布局、水平居中、垂直居中、居中布局)
2018-06-13 17:59:09布局源码 import React, { Component } from 'react'; import { Platform, StyleSheet, View, Image, } from 'react-native'; const instructions = Platform.select({ ios: 'Press Cmd+R to reload,\n' + .... -
PYQT5水平布局后垂直方向控件间距的调整方法
2017-11-22 22:25:24最近在做QT做界面设计,软件使用的是QTCreator4.2.1,pyqt5.8.1,使用水平布局做好界面后,在软件中也调整好了控件的间隔,达到了想要设计的效果,如下图。 -
GTK布局容器之水平布局源代码
2015-01-15 16:30:34GTK入门学习之水平布局:http://blog.csdn.net/tennysonsky/article/details/42741907 -
Flutter:Row(水平布局),Column(垂直布局)
2019-10-23 10:56:23Row(水平布局),Column(垂直布局) 相当于 Android 中的 LinearLayout 的效果。 Row 水平布局是一种常用的布局方式,我们主要用Row组件来完成水平方向的排列, 对于 Row 来说,水平方向是主轴,垂直方向是次轴。... -
QT-纯代码控件-QHBoxLayout(水平布局)
2019-07-18 13:50:49用两个控件实现一个水平布局的效果 1.新建一个无ui界面的工程,其基类为widget 2.代码实现 widget.h头文件不用做任何改变 widget.cpp #include "widget.h" #include <QSlider> //滑竿控件 #include <... -
三种方式实现元素水平居中显示与固定布局和流式布局概念理解
2020-09-22 14:27:19css中让文本居中的属性很简单就可以实现,那就是设置text-align:center即可,让元素水平居中,相信对于许多网页设计师而言都不会陌生,首先,要 让元素水平居中,就必须得了解css设计中固定布局和流式布局两者的概念