QML中qml 定位器器和布局的区别

QML中有定位器,有布局。比如网格的,一个叫Grid一个叫GridLayout,那么他们的区别到底在哪里呢
布局管理器可以使用附加属性;
如果你有widget基础,就会发现了,其实他就是对它的内部布局进行管理,而定位器只能定位,并不能进行管理。
还是来看一段代码;
import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
visible: true
Rectangle{
GridLayout{
columns: 3
anchors.fill: parent
id:button1
text:qsTr(&按钮一&)
Layout.rowSpan: 3//请特别注意此行及以下两行代码
Layout.maximumWidth: 500
Layout.minimumWidth: 100
id:button2
text:qsTr(&按钮二&)
id:button3
text:qsTr(&按钮三&)
id:button4
text:qsTr(&按钮四&)
id:button5
text:qsTr(&按钮五&)
对于其他的行和列布局也就不用赘述了,他们相当于水平和垂直布局管理器。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:96307次
积分:2203
积分:2203
排名:第15199名
原创:122篇
转载:11篇
评论:23条Qt Quick初体验QML编程,Symbian教程,Symbian案例,Symbian实例
     本站短域名:珠江路.cn、zjlu.net
        
     
 |  | 
          
您的位置: &&
&& Qt Quick初体验QML编程
Qt Quick初体验QML编程
  本文标签:    
  本文介绍的是Qt 初体验QML编程,QML它结合了Qt 和QtScript的有点&&。QtDesigner可以出.ui,但是不和Qt原生的&&。
  Creng a
  到现在,我们(的)已经涵盖了如何在单一的QML文件中元素和指定行为&&。在这一节,我们的内容将包含怎样QML元素和如何复用一些创建好的来其他组件&&。
  菜单一个内容,每一项都能一个&&。我们可以通过几种在QML创建一个菜单&&。首先,我们建立一个包含的菜单,每个按钮最终都会执行不同动作&&。菜单代码在Menu.qml中&&。
Code&&QtQuick&1.0&&&&&&&&&&&&&&&&\\import&&ma&Qt&QML&mode &&import&"folderName"&&&&&&&&&&&&\\import&the&contents&of&the&folder &&import&".js"&as&Script&&&&&&&&\\import&a&script&file&&&it&as&Script&
  上面的可以看出怎么样使用import关键字&&。FileMenu.qml需要用到JavaScript文件,或者不在同级下的QML文件&&。因为.qml和FileMenu.qml在同一个目录,我们不需要引入就可以使用它&&。我们可以通过Button{}来直接创建一个Button元素 ,类似于一个Rectangle{}的声明&&。
Code&In&FileMenu.qml: &&&&&&&Row{ &&&&&&&&&&anchors.centerIn:& &&&&&&&&&&spacing:&parent.wth/6 &&&&&&&&&&&Button{ &&&&&&&&&&&&&&id:&loadButton &&&&&&&&&&&&&&buttonColor:&"lightgrey" &&&&&&&&&&&&&&label:&"Load" &&&&&&&&&&} &&&&&&&&&&Button{ &&&&&&&&&&&&&&buttonColor:&"grey" &&&&&&&&&&&&&&id:&saveButton &&&&&&&&&&&&&&label:&"Save" &&&&&&&&&&} &&&&&&&&&&Button{ &&&&&&&&&&&&&&id:&exitButton &&&&&&&&&&&&&&label:&"Exit" &&&&&&&&&&&&&&buttonColor:&"darkgrey" &&&&&&&&&&&&&&&onButtonClick:&Qt.quit() &&&&&&&&&&} &&&&&&}&
  在FileMenu.qml中,我们声明了三个Button元素&&。它们在一个Row元素里,它作为器将它的孩子们沿着一个垂直的行安放&&。Button的声明在Button.qml中,与上节我们用到的Button.qml是一样的&&。在新创建的按钮里可以声明绑定新的,实际上也覆盖了Button.qml中的属性集&&。当exitButton按钮被点击时,会被退出并&&。注意,除了exitButton内的onButtonClick haner会被调用之外,Button.qml内的也会被调到&&。
  Rectangle内声明的Row,创建了一个容纳一行button的容器&&。这个的矩形创造了一种在菜单内组织一行button的间接&&。
  现阶段,编辑菜单的声明非常简单,有三个分别是、Paste和Select All的按钮&&。
  装备了导入和定制之前生成的组件的知识,现在我们可以将这些菜单页组合成一个菜单栏――包含用来选择菜单的按钮,并且看看那我们怎样使用QML组织&&。
  Implenting a Menu
  我们的编辑器需要一种使用菜单栏显示菜单的方法&&。使用菜单栏可以不同的菜单,可以选择要显示的菜单&&。菜单切换意味着这些菜单比单单在一行中显示出来需要更多的&&。QML使用models和views来构建数据并显示这些结构化的数据&&。
  QML有不同的数据views可以显示数据models&&。我们的菜单栏会将菜单显示在一个列表中,这个列表有一个显示一行菜单名的标题&&。我们可以在ItemModel中声明一个菜单列表&&。VisualItemModel包含了像Rectangle和导入的这样的views的items&&。其他的像ListModel元素这样的model需要一个来显示它们的数据&&。
  我们在menuListModel中声明了两个可视的items,FileMenu 和EditMenu&&。我们定制了两个菜单,并使用ListView来显示&&。 MenuBar.qml包含了QML声明和一个在EditMenu.qml中的简单的编辑菜单&&。
CodeVisualItemModel{ &&&&&&&&&&id:&menuListModel &&&&&&&&&&FileMenu{ &&&&&&&&&&&&&&width:&menuListView.width &&&&&&&&&&&&&&height:&menuBar.height &&&&&&&&&&&&&&color:&fileColor &&&&&&&&&&} &&&&&&&&&&EditMenu{ &&&&&&&&&&&&&&color:&editColor &&&&&&&&&&&&&&width:&&menuListView.width &&&&&&&&&&&&&&height:&menuBar.height &&&&&&&&&&} &&&&&&}&&
  ListView元素将按照一个delegate来显示一个model&&。这个delegate可能声明在一个Row元素或则grid元素里显示的model items&&。我们的menuListModel已经有可见的items,因为,我们就不需要一个delegate了&&。
ListView{ &&&&&&&&&&id:&menuListView &&&&&&&&&&//Anchors&are&&to&react&to&&anchors &&&&&&&&&&anchors.fill:parent &&&&&&&&&&anchors.bottom:&parent.bottom &&&&&&&&&&width:parent.width &&&&&&&&&&height:&parent.height &&&&&&&&&&//the&model&contains&the&data &&&&&&&&&&model:&menuListModel &&&&&&&&&&//control&the&movement&of&the&menu&switching &&&&&&&&&&snapMode:&ListView.SnapOneItem &&&&&&&&&&orientation:&ListView.Horizontal &&&&&&&&&&bounds:&Flickable.SAtBounds &&&&&&&&&&flickDeceleration:&5000 &&&&&&&&&&highlightFollowsCurrentItem:&true &&&&&&&&&&highlightMoveDuration: &&&&&&&&&&highlightRangeMode:&ListView.StrictlyEnRange &&&&&&}&
  另外,ListView继承自Flickable,使可以响应拖拽和其他&&。上面代码的最后一部分了Flickable属性,对view创建了我们期待的闪烁&&。特别是highlightMoveDuration属性改变闪烁转变的过渡&&。highlightMoveDuration的值越大菜单切换越慢&&。
  ListView通过来所有的model的items,通过index被声明的顺序,可以model中的每一个可见item&&。改变currentIndex实际上改变了ListView中的高亮item&&。我们的菜单栏的标题以证明了这种效果&&。一行里有两个按钮,当被点击时,两个都会改变当前的菜单&&。当点击fileButton时,会改变当前的菜单到文件菜单,index为0的原因是,FileMenu 在menuListModel中是第一个声明的&&。同样地,点击editButton时改变当前菜单到EditMenu&&。
  labelList的z为1,表示它显示在菜单栏前面&&。z值高的items显示在低z值的前&&。缺省的z值是0.
Rectangle{ &&&&&&&&&&id:&labelList &&&&&&&&&&... &&&&&&&&&&z:&1 &&&&&&&&&&Row{ &&&&&&&&&&&&&&anchors.centerIn:&parent &&&&&&&&&&&&&&spacing:40 &&&&&&&&&&&&&&Button{ &&&&&&&&&&&&&&&&&&label:&"File" &&&&&&&&&&&&&&&&&&id:&fileButton &&&&&&&&&&&&&&&&&&... &&&&&&&&&&&&&&&&&&onButtonClick:&menuListView.currentIndex&=&0&&&&&&&&&&&&&&} &&&&&&&&&&&&&&Button{ &&&&&&&&&&&&&&&&&&id:&editButton &&&&&&&&&&&&&&&&&&label:&"Edit" &&&&&&&&&&&&&&&&&&... &&&&&&&&&&&&&&&&&&onButtonClick:&&&&menuListView.currentIndex&=&1&&&&&&&&&&&&&&} &&&&&&&&&&} &&&&&&}&&
  我们刚刚建立的菜单栏可以通过轻打或者点击顶端的菜单名字访问菜单&&。切换菜单的感觉起来直观而且反应很快&&。
  小结:Qt Quick初体验QML编程的内容介绍完了,完成了一个简单的菜单的小实例,希望通过本篇的实例,能对你有所!!!
数据库开发
产品库推荐
All Rights Reserved.
珠江路在线版权所有
 |  |  | qt学习(3)
选择qt-opensource-linux-x64-5.8.0.run
进入qt-opensource-linux-x64-5.8.0.run目录下,修改文件权限:qt-opensource-linux-x64-5.8.0.run;
打开安装界面: ./qt-opensource-linux-x64-5.8.0.run;
图形化界面安装;
进入Qt5.3.1/Tools/QtCreater/bin/,可以鼠标双击qtcreater启动;
1.1qt5中中文输入(qt5.5版本之后这个方法就无效了)
安装fcitx-frontend-qt5,如果安装成功会在其下有个plugin目录
sudo apt-get install fcitx-frontend-qt5
然后将/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so 复制到 qt安装目录下的Tools/QtCreator/bin/plugins/platforminputcontexts/和5.4/gcc_64/plugins/platforminputcontexts/下
Qt Creator是跨平台的 Qt IDE,Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。
2.1Qt的跨平台性(Linux、Unix、、Mac OS、Android、iOS)
1.Qt/Windows对应的是GDI(Graphics Device Interface),它是Qt封装的与GDI交流的API。而GDI是Windows下图形绘制及显示的主要API。
2.Qt/X11同样是对X Windows的编程接口。Linux本身是没有操作界面的,目前主流带有操作界面的Linux系统都是基于X WIndows,X Windows是C/S框架的(就是所有的鼠标事件传递到X Windows的服务端处理之后对应在屏幕上显示内容),Qt/X11使用Xlib直接与X服务器通信的。(GDI是集成到Windows内核的,而X Windows只是Linux系统的应用软件而已)
3.Qt/Macintosh就不用说了。Carbon是Mac OS X下应用程序开发环境,包含了应用程序的图形部分。目前主流的Cocoa好像使用更好。
上图主要说明的是UI部分,Qt跨平台都是调用本地的图形风格。
2.3qt qml和qt quick框架
QML是一种编程语言
Qt Qml为QML语言开发应用程序提供一个框架
Qt Quick是QML的一个标准库,提供两种接口:1.使用qml语言创建应用的qml接口和使用c++语言扩展qml的c++接口,使用QtQuick模块,设计者和开发者可以很容易使用QML建立带有流畅动画的用户界面,并将这些界面连接到后端的C++库上面。
qt5中qml和qt quick完全分离,
这里Qt 4.x版本 提供的 Qt Quick 1 ,qt5.x版本主要用的是qt quick2.qt5.x版本为了兼容低版本,因此继承了qt quick1
Quick1只能做一些变形旋转而没有更牛的特效了,因为QPainter确实不能做那个,然而qt quick2的功能比较厉害,因为经过了Qt GUI、OpenGL、Scene Graph三层封装。强调的是如何高效的绘制图形并按要求创建各种效果。所以里面包含了可视化类型(QML)、交互类型、动画、模型视图、粒子特效、渲染特效等。
介绍完了qt5框架,接下来学习下qml语言
通常我们在构建ui界面的时候有两种方式,1.用qml语言来编写ui界面,2.我们创建的qt quick application目录中有个.ui.qml来绘制ui界面,(layout形式绘制)
第二种方法绘制的ui界面占用的内存相对大些
使用第一种方法就要学习qml语言
3.1qml中基本元素:
3.1.1 基本可视化项
Item 基本的项元素 在QML中所有可视化都继承他
Rectangle 基本的可视化矩形元素
Gradient 定义一个两种颜色的渐变过程
GradientStop 定义个颜色,被Gradient使用
Image 在场景中使用位图
BorderImage(特殊的项) 定义一张图片并当做边界
AnimatedImage 为播放动画存储一系列的帧
Text 在场景中使用文本
TextInput 显示单行可编辑的纯文本
TextEdit显示多行的可编辑文本
IntValidator int 验证器
DoubleValidator double 验证器
RegExpValidator 验证字符串正则表达式
TextEdit 显示多行可编辑文本
3.1.2基本的交互项(事件处理)
MouseArea 鼠标句柄交互
MouseEvent鼠标事件
WheelEvent滚动事件
DrangEvent拖放事件
FocusScope 键盘焦点句柄
focus键盘事件
Flickable 提供一种浏览整张图片的一部分的效果,具体看例子
Flipable 提供一个平面,可以进行翻转看他的前面或后面,具体看例子
Timer定时器
State 定义一个配置对象和属性的集合
PropertyChanges 使用一个State描述属性的改变
StateGroup 包含一个状态集合和状态变换
ParentChange 重新定义父集,也就是换个父节点
AnchorChanges 在一个状态中改变anchors
3.1.4图形效果
使用图形效果模块,要在.qml文件中导入
import QtGraphicalEffects 1.0
Gradient 定义一个两种颜色的渐变过程
Blend混合效果
Color颜色效果
Distortion变形效果
DropShadow阴影效果
Blur模糊效果
Glow发光效果
OpacityMask遮罩效果
3.1.5动画和变换
Behavior 默认的属性变换动画
SequentialAnimation 对定义的动画串行播放
ParallelAnimation 对定义的动画并行播放
PropertyAnimation 属性变换动画
NumberAnimation 对实数类型属性进行的动画
Vector3dAnimation 对QVector3d进行的属性
ColorAnimation 颜色进行的变换动画
RotationAnimation 对旋转进行的变换动画
ParentAnimation 对父节点进行变换的动画,改变绑定的父节点
AnchorAnimation 对anchor 进行改变的动画
PauseAnimation 延迟处理
SmoothedAnimation 允许属性平滑的过度
SpringAnimation 一种加速的效果
PropertyAction 允许在动画过程中对属性的直接改变
ScriptAction 允许动画过程中调用脚本
Transition 在状态变换中加入动作变化
3.1.6工作中的数据
Binding 在创建的时候绑定一些数据到一些属性
ListModel 定义链表数据
ListElement 定义ListModel的一个数据项
VisualItemModel 包含可视化项(visual items)到一个view中,相当是一个容器
VisualDataModel 包含一个model和一个delegate,model包含需要的数据,delegate设计显示的项的信息,具体的去看例子
Package 他的目的是把VisualDataModel共享给多个view,具体还要学习
XmlListModel 特殊的一个模式使用XPath表达式,使用xml来设置元素,参考例子
XmlRole XmlListModel的一个特殊的角色
ListView 提供一个链表显示模型视图
GridView 提供一个网格显示模型视图
PathView 提供一个内容沿着路径来显示的模型
Path 定义一个PathView使用的轨迹
PathLine 定义一个线性的轨迹
PathQuad 定义一个二次贝塞尔曲线的轨迹
PathCubic 定义一个三次贝塞尔曲线的轨迹
PathAttribute 允许绑定一个属性上,具体看例子
PathPercent 修改item分配的轨迹 不是很明了其中的意思
WebView 允许添加网页内容到一个canvas上
3.1.8定位器(布局管理)
Column 将几个子项目排成一列
Row 将几个子项目排成一行
Grid 设置它的子项目到一个网格上
Flow 目的是不让他的子项重叠在一起,将子项目从前向后,像流一样布局
Layouts布局管理器
LayoutMirroring在水平方向镜像锚布局
Connections 明确连接信号和信号句柄
Component 封装QML items 想一个组件一样
Timer 提供时间触发器
QtObject 基本的元素只包含objectName属性
Qt qml全局Qt object提供使用的枚举和函数
WorkerScript 允许在QML使用线程
Loader 控制载入item或组件
Repeater 使用一个模型创建多个组件
SystemPalette 为Qt palettes提供一个通道
FontLoader 载入字体根据名字或URL
LayoutItem 允许声明UI元素插入到qtGraphicsView 布局中
3.1.10变换
Scale 分派item 缩放行为
Rotation 分派item 旋转行为
Translate 分派item 移动行为
下面文章将会介绍Qt quick中项目属性
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6624次
排名:千里之外
原创:47篇
(4)(6)(4)(12)(17)(1)(5)QML中定位器和布局的区别
QML中定位器和布局的区别
QML中有定位器,有布局。比如网格的,一个叫Grid一个叫GridLayout,那么他们的区别到底在哪里呢
布局管理器可以使用附加属性;
如果你有widget基础,就会发现了,其实他就是对它的内部布局进行管理,而定位器只能定位,并不能进行管理。
还是来看一段代码;
import QtQuick 2.3
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
visible: true
Rectangle{
GridLayout{
columns: 3
anchors.fill: parent
id:button1
text:qsTr(&按钮一&)
Layout.rowSpan: 3//请特别注意此行及以下两行代码
Layout.maximumWidth: 500
Layout.minimumWidth: 100
id:button2
text:qsTr(&按钮二&)
id:button3
text:qsTr(&按钮三&)
id:button4
text:qsTr(&按钮四&)
id:button5
text:qsTr(&按钮五&)
对于其他的行和列布局也就不用赘述了,他们相当于水平和垂直布局管理器。
我的热门文章
即使是一小步也想与你分享}

我要回帖

更多关于 qt qml qt quick 区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信