剖析 QML 视图 简单易学

移动开发
本文介绍的是QML视图,如果你了解QML,那么本文就好理解了,不了解的话,那么本文将会给你详细的介绍!

QML视图是本文要介绍的内容,在QML中提供了三种视图方式:ListView列表视图、GridView网格视图和PathView路径视图。这三种视图都是继承自Flickable ,所以它们都有Flickable效果。下面我们简单介绍一下ListView和PathView。

一、ListView列表视图。

如果你了解Qt的模型视图结构,那么这一节的内容就很好理解了,如果你没接触过,也没关系,因为它其实很简单。在Qt中我们要想利用视图显示一些数据,并不是将这些数据直接放到视图中的,因为视图只管显示,它不存储数据。我们的数据要放在数据模型中。但是数据模型中只是存放数据,它并不涉及数据的显示方式。所以,我们还要用一个叫做代理的东东来设置数据模型中的数据怎样在视图中显示。那么就构成了下面的关系。

 QML 视图

我们先看下面的例子:

1、新建一个Qt QML Application工程,命名为“myView”。

2、我们更改代码如下:

  1. import Qt 4.6  
  2. Rectangle {  
  3. width:200;height:200  
  4. ListModel{  //数据模型  
  5. id:listModel  
  6. ListElement{name:”Tom”;number:”001″}  
  7. ListElement{name:”John”;number:”002″}  
  8. ListElement{name:”Sum”;number:”003″}  
  9. }  
  10. Component{     //代理  
  11. id:delegate  
  12. Item{ id:wrapper; width:200; height:40  
  13. Column{  
  14. x:5; y:5  
  15. Text{text:”<b>Name:</b>”+name}  
  16. Text{text:”<b>Number:</b>”+number}  
  17. }  
  18. }  
  19. }  
  20. Component{   //高亮条  
  21. id:highlight  
  22. Rectangle{color:”lightsteelblue”;radius:5}  
  23. }  
  24. ListView{  //视图  
  25. width:parent.width; height:parent.height  
  26. model:listModel  //关联数据模型  
  27. delegate:delegate  //关联代理  
  28. highlight:highlight  //关联高亮条  
  29. focus:true  //可以获得焦点,这样就可以响应键盘了  
  30. }  

运行效果如下:

 QML 视图

我们可以拖动整个列表,而且可以使用键盘的方向键来选择列表中的项目。

在这个程序中,我们先设置了数据模型,在其中加入了一些数据。然后设置了代理,在代理中我们设置了要怎样显示我们的数据。***,我们在视图中关联了数据模型和代理,将数据显示出来了。这里为了达到更好的显示效果,我们使用了一个高亮条。其中的代理和高亮条都可以使用Component{}组件来实现。

3.我们可以对视图做一些设置。

我们可以设置keyNavigationWraps:true 使到达***一个项目后重新返回***个项目。

我们可以设置orientation:ListView.Horizontal使列表水平显示。这时你拖动列表,发现了吧,它可以自动移动到下一条,这就是Flickable的作用。默认的是ListView.Vertical竖直显示。

#p#

二、PathView路径视图

1.什么是路径视图,我们先来看一个例子。

  1. Rectangle {  
  2. width:300;height:300;  
  3. ListModel{  //数据模型  
  4. id:listModel  
  5. ListElement{icon:”01.gif”}  
  6. ListElement{icon:”02.gif”}  
  7. ListElement{icon:”03.gif”}  
  8. ListElement{icon:”04.gif”}  
  9. }  
  10. Component{     //代理  
  11. id:delegate  
  12. Item{ id:wrapper; width:50; height:50  
  13. Column{  
  14. Image {source:icon;width:50;height:50}  
  15. }  
  16. }  
  17. }  
  18. PathView{  //路径视图  
  19. anchors.fill:parent; model:listModel; delegate:delegate  
  20. path:Path{startX:120;startY:200  
  21. PathQuad{x:120;y:25;controlX:260;controlY:125}  
  22. PathQuad{x:120;y:200;controlX:-20;controlY:125}  
  23. }  
  24. }  

效果如下:

 QML 视图

你可以拖动一个图标查看效果,是的,所有图标的转起来了。这就是路径视图。我们在程序中,设置了一个路径,如上面的:

  1. path:Path{startX:120;startY:200  
  2. PathQuad{x:120;y:25;controlX:260;controlY:125}  
  3. PathQuad{x:120;y:200;controlX:-20;controlY:125}  

它们确定了一个椭圆形,所有的项目都在这个路径上,当拖动一个项目,所有的项目都会在路径上移动。

2、关于Path

在QML中提供了三种Path。PathLine直线,PathQuad二次贝塞尔曲线,PathCubic三次贝塞尔曲线。你可以在帮助中查看它们的使用,这里不再进行过多介绍。

3、路径属性。

我们可以通过路径属性PathAttribute ,来设置不同路径上不同位置的项目。

例如我们更改上面的程序:

  1. Component{     //代理  
  2. id:delegate  
  3. Item{ id:wrapper; width:50; height:50  
  4. scale:PathView.scale; opacity:PathView.opacity  
  5. Column{  
  6. Image {source:icon;width:50;height:50}  
  7. }  
  8. }  
  9. }  
  10. PathView{  
  11. anchors.fill:parent; model:listModel; delegate:delegate  
  12. path:Path{startX:120;startY:200  
  13. PathAttribute{name:”scale”;value:1.0}  
  14. PathAttribute{name:”opacity”;value:1.0}  
  15. PathQuad{x:120;y:25;controlX:260;controlY:125}  
  16. PathAttribute{name:”scale”;value:0.5}  
  17. PathAttribute{name:”opacity”;value:0.5}  
  18. PathQuad{x:120;y:200;controlX:-20;controlY:125}  
  19. }  
  20. }  

效果如下:

 QML 视图

我们在Path中设置了路径属性,使得在不同点的图片具有不同的效果,这里设置了缩放和不透明度两个属性。我们只需设置开始点和结束点两个点的属性,这样就会在整个路径上进行线性插值。这一节介绍了两个视图,还有一个GridView网格视图,它的操作是相似的,在这里就不再进行介绍了。

本文章原创于 www.yafeilinux.com

小结:剖析 QML 视图的内容介绍完了,希望本篇文章对你有所帮助!更多内容请参考编辑推荐!

责任编辑:zhaolei 来源: 互联网
相关推荐

2010-02-01 14:37:44

PythonWin模块

2011-06-10 11:05:05

Qt Quick QML

2010-05-18 18:09:41

IIS Lockdow

2010-04-15 11:38:23

配置无线局域网

2010-05-20 16:09:07

优化IIS

2022-09-14 10:50:36

npm代码前端

2010-06-11 16:27:47

UML视图

2010-07-05 15:26:03

UML九种视图

2009-08-27 16:29:18

C#动态编译

2010-02-24 17:54:02

2010-03-05 09:49:34

Python文件操作

2009-11-17 16:47:09

Oracle物化视图日

2009-08-28 11:16:51

C#日期型数

2009-10-19 18:01:35

Linux磁盘分区

2010-05-13 15:38:19

Subversion

2011-09-04 09:54:46

笔记本技巧

2013-06-14 13:50:28

iOS开发移动开发警告视图

2010-05-19 12:41:32

Subversion

2012-02-08 10:12:19

Java反射

2017-03-16 17:40:05

Linux架构运维
点赞
收藏

51CTO技术栈公众号