Qt Quick快速入门之qml布局

  Qml里面布局主要有两种,锚点布局、Grid布局。

  锚点布局使用anchors附件属性将一个元素的边定位到另一个元素的边,从而确定元素的位置和大小。下面是示例

 1 import QtQuick 2.3
 2 import QtQuick.Window 2.0
 3
 4 Window {
 5     id:anchorLayoutWindow;
 6     width: 480;
 7     height: 320;
 8     title: "AnchorLayout";
 9
10     Rectangle{
11         id:rect1;
12         width: parent.width;
13         height:50;
14         color:"blue";
15         anchors.top: parent.top;
16         Text{ text: "Top"; anchors.horizontalCenter: parent.horizontalCenter;anchors.top:parent.top; color:"white"; }
17     }
18
19     Rectangle{
20         id:rect2;
21         width: parent.width/4;
22         color: "red";
23         anchors.top:rect1.bottom;
24         anchors.bottom: rect4.top
25         anchors.left: parent.left;
26         Text{ text: "Left"; anchors.verticalCenter: parent.verticalCenter; anchors.left: parent.left;color:"white"; }
27     }
28
29     Rectangle{
30         id:rect3;
31         color: "green";
32         width:rect2.width;
33         anchors.top:rect1.bottom;
34         anchors.bottom: rect4.top;
35         anchors.right:parent.right;
36         Text{ text: "Right";anchors.right: parent.right;anchors.verticalCenter: parent.verticalCenter;color:"white"; }
37     }
38
39     Rectangle{
40         id:rect4;
41         width: parent.width;
42         height:50;
43         color:"yellow";
44         anchors.bottom: parent.bottom;
45         Text{ text: "Bottom"; anchors.horizontalCenter: parent.horizontalCenter;anchors.bottom: parent.bottom;color:"blue";}
46     }
47
48     Rectangle{
49         id:rect5;
50         color:"#FF605066";
51         anchors.top:rect1.bottom;
52         anchors.bottom: rect4.top;
53         anchors.left: rect2.right;
54         anchors.right: rect3.left;
55         Text{ text: "Center";anchors.centerIn: parent; color:"white";}
56     }
57
58 }

  

  效果如下图

  

  Grid布局有GridLayout、ColumnLayout、RowLayout、Column、Row,其中ColumnLayout、RowLayout只是GridLayout的一种特例,ColumnLayout表示只有一列,RowLayout表示只有一行。

  GridLayout使用columns、rows属性将空间分成若干单元格,使用columnSpacing、rowSpacing确立单元格之间的间隔。而GridLayout内部元素的大小由Layout.fillWidth、Layout.fillHeight以及Layout.preferredWidth、Layout.preferredHeight来确定,如Layout.fillWidth:true表示宽度填充整个单元格,Layout.preferredWidth则指定一个建议宽度。Layout.row、Layout.column确定内部元素处于哪个单元格。注意,不要将内部元素的宽度、高度、x、y与GridLayout进行绑定,容易导致绑定循环。

  Column、Row类似于html中的float或是wpf中的StackPanel,会直接将元素一个个挨在一起,元素间的间隔使用spacing控制

  下面是GridLayout布局的一个示例

 1 import QtQuick 2.3
 2 import QtQuick.Window 2.0
 3 import QtQuick.Layouts 1.1
 4
 5 Window {
 6     id:gridLayoutWindow;
 7     title:"GridLayoutWindow";
 8     width: 480;
 9     height: 320;
10     GridLayout{
11         id: gridLayout1
12         columns: 2;
13         rows:2;
14         anchors.fill: parent;
15         anchors.margins: 5;
16         columnSpacing: 0;
17         rowSpacing: 0;
18
19         Rectangle{
20             id:rect00;
21             color: "red";
22             Layout.fillWidth: true;
23             Layout.fillHeight: true;
24         }
25
26         Rectangle{
27             id:rect01;
28             color: "blue";
29             Layout.fillWidth: true;
30             Layout.fillHeight: true;
31         }
32
33         Rectangle{
34             id:rect10;
35             color: "green";
36             Layout.fillWidth: true;
37             Layout.fillHeight: true;
38             Layout.row:1;
39             Layout.column: 1;
40         }
41
42     }
43 }

  效果如下所图

  

  

  SplitView用于提供带切分条的布局,下面是示例

import QtQuick 2.3
import QtQuick.Window 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2

Window {
    width: 480;
    height: 320;
    title: "SplitView";

    SplitView{
        anchors.fill:parent;
        orientation: Qt.Horizontal;
        Rectangle{
            id:rect1;
            width:100;
            color:"red";
        }
        Rectangle{
            id:rect2;
            Layout.fillWidth: true;
            Layout.minimumWidth: 50;
            color:"blue";
        }
        Rectangle{
            id:rect3;
            width:100;
            color:"green";
        }
    }
}

  下面是效果图,注意实际情况可以拖拉切分条

  

  OK,有了以上几种布局方式,通过一定的组合相信可以应对大部分布局需求了

时间: 2024-10-06 00:43:44

Qt Quick快速入门之qml布局的相关文章

Qt Quick快速入门之qml与C++交互

C++中使用qml对象,直接使用findChild获取qml对象,然后调用setProperty方法设置属性,当然必须在加载qml之后才能使用,不然findChild找不到对象,用法如下. engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QObject * text_Msg = engine.rootObjects()[0]->findChild<QObject*>("text_Msg");

Qt Quick快速入门

年前花了一个多月的时间看Qt的文档并根据自己的需要演练了一部分,之后写了一套UI,然后陆陆续续也弄了一些小工具(主要是上位机程序),由于后面工作估计会越来越忙,就能写一点是一点了,希望能对读者有帮助. 1.Qt Quick快速入门之qml布局 2.Qt Quick快速入门之qml与C++交互 3.Qt Quick快速入门之信号.槽 4.Qt Quick快速入门之线程基础 5.Qt Quick自定义样式一套 顺便打个广告,公司最近要补充一大批人(貌似要招差不多100人左右吧,研发方面主要是硬件.嵌

Qt Quick快速入门之线程基础

首先必须明确的是,Qt中的线程使用是相对复杂的,并不像C#中那么随意,特别是结合串口.网络编程等,使用时稍有不慎就会出问题,然后Qt里面经常出了问题就直接崩溃(这个真是谁用谁知道),所以如果在功能上用异步方式能做到其实就没必要自己去开线程,当然如果自己写的函数比较耗时(比如不断地循环做操作之类的)就无法避免使用线程了. Qt中一般将耗时操作单独放在一个类中实现,在主线程中创建类对象,然后将这个对象移到子线程中,主线程与子线程间的通信主要通过信号和槽实现.另外对象是在主线程中创建的,对象中的成员都

Qt Quick快速入门之信号、槽

信号和槽主要用于组件之间的通信,类似于.net和java中的委托. 使用QObject::connect方法将信号与槽关联起来,然后信号的发起者发出信号,接受者中的槽函数就会执行. 比如connect(this,SIGNAL(start()),worker,SLOT(Start())),将当前类中start信号关联到worker对象的Start函数,当我们调用emit this->start()时就发出信号,槽函数就会收到这个信号. connect函数还有第五个参数,这个参数决定信号何时传给槽,

【Android快速入门3】布局简介及例子

目前自学到布局部分,下面演示了不同布局的基本训练,涵盖的内容还是不错的,而且简单易懂,分享给大家. 1.LinearLayout流式布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pa

从头学Qt Quick(2)-- QML语法从一个简单的例子说起

在上一篇文章中,我们对QtQuick做了简单的介绍,体验了使用QML语言构建一个UI的便捷.这里我们简要介绍一下QML的语法. QML将界面分成一些更小的元素,这些元素可以组成一个组件,QML语言描述了UI的形状和行为,并且可以使用JavaScript修饰.总的来说QML的结构有点像HTML,其语法和CSS比较近似. 1.QML层次结构 要使用QML进行界面的布局,首先需要理解QML元素的层次结构.QML的层次结构很简单,是一个树形结构,最外层必须有一个根元素,根元素里面可以嵌套一个或多个子元素

[Qt Creator 快速入门] 第5章 应用程序主窗口

??这一章开始接触应用程序主窗口的相关内容.对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点是讲解知识点,而相关的综合应用实例放到了<Qt及Qt Quick开发实战精解>一书中. ??Qt中提供了以QMainWindow类为核心的主窗口框架,包含了众多相关的类,它 们的继承关系如图5 - 1所示,本章会讲解到图中每一个类的基本应用. 图5-1主

Qt 动画快速入门(一)

Qt-4.6动画Animation快速入门三字决 Qt-4.6新增了Animation Framework(动画框架),让我们能够方便的写一些生动的程序.不必像以前的版本一样,所有的控件都枯燥的呆在伟大光荣的QLayout里,也许它们可以唱个歌,跳个舞.    所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情.当然做这件事情,最好用的就是状态机,没错Qt-4.6.0提供了QStateMachine类,不过今天我要讲的三字决要简单一些. 第一决:Q

QT Creator 快速入门教程 读书笔记(一)

一 Qt简介 Qt 是一个跨平台的C++应用程序框架,支持Windows.Linux.Mac OS X.Android.iOS.Windows Phone.嵌入式系统等.也就是说,Qt 可以同时支持桌面应用程序开发.嵌入式开发和移动开发,覆盖了现有的所有主流平台.你只需要编写一次代码,发布到不同平台前重新编译即可. Qt 不仅仅是一个GUI库,它除了可以创建漂亮的界面,还有很多其他组件,例如,你不再需要研究STL,不再需要C++的<string>头文件,不再需要去找解析XML.连接数据库.So