QT怎么解决不同分辨率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT怎么解决不同分辨率相关的知识,希望对你有一定的参考价值。
参考技术A 做嵌入式和移动开发,不同的设备,不同的分辨率需要UI能够适配,这是一个很现实的问题。QML作为Qt中为UI而生的,使用QML一定要解决适配的问题。现在同一尺寸的屏幕,其分辨率也是不同,在QML中使用 anchors 进行相对的布局时,其是以像素为单位。现在有一个概念,叫做每英寸像素数目。当设备的PPI不同时,控件的大小不同,这可能导致,如果设计是在一个尺寸小PPI低的屏幕上设计,将程序放到一个尺寸大PPI高的设备上,那么控件看上去就更小了,所以在QML中直接使用像素布局是不可取的。
Qt移动应用开发:使用动画框架
Qt移动应用开发(二):使用动画框架
上一篇博客介绍了怎样使用Qt的QML来对屏幕分辨率大小进行适应,其实,不同分辨率的适应是一个很棘手的问题,除了分辨率不同外,宽高比(aspect ratio)也不尽同样。
有些平板在硬件上做得和IPad一样是Retina屏(2048×1536),有些低端的手机分辨率仅仅有320×480。这样宽高比又不一样了。所以在设计App的过程一定要对内容布局有所规划。採用锚布局的方法能够帮我们解决一定的问题,同一时候也要善用Screen类的成员来获得系统分辨率的很多其它信息。
这篇文章主要介绍的是QtQuick的动画框架。
Qt Quick动画框架自从Qt4的时代就有了,当时也有非常多的demo给我们眼前一亮。
脱胎于C++的动画框架。Qt Quick的动画框架绚丽而且易用。非常值得学习。
原创文章。反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/32730079
首先介绍一下与动画框架相关的几个类:
Animation是这些类的基类。它具有这几个属性:
alwaysRunToEnd : bool loops : int paused : bool running : bool
后三个属性很好理解。第一个解释一下,假设设为true,那么不管动画是否结束,他都会让动画完毕最后一轮播放。设为false,那么一旦动画结束。那么动画马上结束。
Animation有非常多子类。包含AnchorAnimation、ParallelAnimation、ParentAnimation、PathAnimation、PauseAnimation、PropertyAction、PropertyAnimation、ScriptAction、和 SequentialAnimation。我们在实际应用中。一般单个动画会使用PropertyAnimation的子类ColorAnimation、NumberAnimation、RotationAnimation和Vector3dAnimation,以下是一个简单的样例:
NumberAnimation on x { from: 0;to: 100; duration: 1000 }
如上面样例所看到的,PropertyAnimation以下的子类灵活多样。有多种语法存在形式,经常和介词on以及短语Behavior on连用。上面的样例表示介词on左边的动画类型一定要和右边的属性类型相应。假设要对一个vector3d的变量应用介词on。那么应该这么写:
Vector3dAnimation on position { from: Qt.vector3d( 0, 0, 0 ); to Qt.vector3d( 1, 1, 1 ); duration: 1000 }
Behavior on和on的差别在于Behavioron是提供了默认的动画操作。即Behavior里面能够描写叙述默认的动画:
Behavior on width { NumberAnimation { duration: 1000 } }
但可能是Qt Quick动画这一块不完好吧,有的时候在不同的平台上表现会有所不同,有时Behavior不工作。有时却又是好的(问题描写叙述)。
当Behavior遇到了状态转换(transition)时,Behavior会被覆盖。详情请參阅Qt的相关文档。
大家看到我制作的游戏三个细菌和胶囊是一直从左往右移动的,而且是循环的,这里展示一下代码:
Image { id:animateCapsule height:parent.width / 10 width:height / 2 propertyint xFrom: parent.width + height * 8 propertyint xTo: -height * 2 x:xFrom y:parent.height * 0.45 source:"../../images/capsule.png" RotationAnimation on rotation { from:0 to:360 loops:Animation.Infinite duration:2000 } //@桌面:请注意使用这一段代码 Behavioron x { NumberAnimation { from:animateCapsule.xFrom to:animateCapsule.xTo loops:Animation.Infinite duration:2000 } } }
本文參加了CSDN博文大赛。请大家支持我,为我投一票!
以上是关于QT怎么解决不同分辨率的主要内容,如果未能解决你的问题,请参考以下文章
电脑屏幕太小,qt等部分软件无法全部显示怎么办?急急急!求指教!
请问,linux下C/C++怎么获取屏幕分辨率?(不使用Qt和GTK)