剖析 QML 视图 简单易学
创始人
2024-08-01 19:21:33
0

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:”Name:”+name}  
  16. Text{text:”Number:”+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 视图的内容介绍完了,希望本篇文章对你有所帮助!更多内容请参考编辑推荐!

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...