Qt Creator的安装和Qml项目的创建
什么是Qt
Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
下载安装包
下载好后先别急着点开
安装
如果不想注册,点开之前先断网
- 如果没注册Qt账号的先注册
- 填写好账号密码点击右下角Next
- 如果有公司可以填,也可以不填,勾选这两项包快的,点击右下角Next
- 这里直接下一步,点击右下角Next
5.如果不想把自己的隐私透露出去,选第二个,点击右下角Next
-
第一个框:选择安装路径,建议不选C盘
第二个框:自定义安装,其实如果你不想那么麻烦,就全选了吧
点击右下角Next
- 如果选择了Custom Installation,那就看自己需求选,点击右下角Next
- 勾选后点击右下角Next
- 设置开始菜单快捷方式,直接点击右下角Next
- 查看自己的空间足部足够,然后点击右下角install,记得联网
- 等他下载完后就Finish可以启动了
创建项目
打开Qt Creator后就这个界面,左边创建项目就行了,右边就是打开过的项目
点击创建项目,选额Application(Qt)→Qt Quick Application
输入项目名称和路径
然后一直下一步就行了,这就是Qml项目的项目结构,只用看有锤子图标的demoQmlApp部分里的main.qml,Source Files是装C++文件的,先不用看
打开main.qml,可以先把这里删了
输入以下内容,然后点击左下角的绿色三角箭头运行,你就得到了第一个由qml创建的页面了
1 |
|
Window组件
写qml就像再写css一样,但是里面又有js的写法,所以编写qml非常的方便和快捷
如果我们需要一个窗口,就需要用到Window组件
基本的属性
属性 | 值 | 说明 |
---|---|---|
width | number | 窗口宽度* |
height | number | 窗口高度* |
visible | boolean | 窗口是否显示* |
title | QString | 窗口标题 |
x/y | number | 窗口位置 |
minimumWidth/minimumHeight | number | 窗口最小宽度/高度 |
maximumWidth/maximumHeight | number | 窗口最大宽度/高度 |
而编写成以下代码,就你创建出一个简单的窗口
1 |
|
添加标题
1 |
|
设置窗口固定大小
1 |
|
当然,还可以设置窗口透明度,添加以下代码就行
1 |
|
在Qt中会有信号和槽函数这一说法,而QML中定义信号,就会有相应的槽函数
1 |
|
而在Window
组件中,也已经定义了多种槽函数,只要输入on,就你看到提示中有很多槽函数
而如果我们定义一个变量值,它也会自动生成一个函数,来检测值的改变
1 |
|
通过onWidthChanged
这个去举例,引出槽函数,然后在里面打印它存在的变量,运行后,拉伸窗口宽度,可以看到打印了qml: width: 600
类似的输出
1 |
|
Rectangle组件
Rectangle
是用Item
组件引申出来的组件,Item
组件有的,它都有
其实了解了窗口的属性,其他的属性也都是差不多的,id
是为了方便获取组件中的属性值
1 |
|
z
属性就如css
中的z-index
一样
1 |
|
锚点定位[anchors]
一般是这种形式
1 |
|
fill 填充完父组件
1 |
|
left/top/right/bottom 锚点定位
让rect2
放在里rect1
方块的右边,并且在同一条水平线,且离rect1距离20
1 |
|
后面加个Margin
代表该Rectangle
外边距
居中定位
三种,水平居中,垂直居中,水平垂直居中
1 |
|
旋转与缩放
通过添加rotation
和scale
属性来旋转和缩放
1 |
|
Item与Rectangle
而相比于Item,Rectangle多了以下属性
1 |
|
渐变
1 |
|
事件
在qml
中,我们可以通过引入QtQuick.Controls
去使用Button
组件
以下创建了两个按钮,按键盘的左右方向键可以切换这两个按钮的样式
1 |
|
1 |
|
获取正在被聚焦的组件,及信息
1 |
|
MouseArea
这个组件为了能让Rectangle等没有点击事件的组件设计而成
主要的方法如下
方法 | 说明 |
---|---|
onClicked | 点击事件,点击区域触发 |
onDoubleClicked | 双击事件,快速双击区域触发 |
onPressed | 按下事件,点击按下区域触发 |
onReleased | 松开事件,点击松开区域触发 |
onPressAndHold | 长按事件,长按区域触发 |
onCanceled | 取消点击事件,目前测出点击区域,然后且换窗口会触发 |
onEntered | 点击进入事件,如果鼠标点击区域或点击离开区域再次进入区域会触发 |
onExited | 点击离开事件,如果鼠标点击区域后松开或离开区域会触发 |
1 |
|
或者
1 |
|
只是看谁嵌套进去而已
如何右键
很简单,在MouseArea
里加这一行就行了,每添加一个按键,前面要加个|
1 |
|
如果你想添加其他的鼠标按键,下面的按键,任你挑选,只要把::
换成.
就行了
XButton
为侧键,1是后侧键,2是前侧键 [我的鼠标是这样的]
怎么区分是哪个按键
可以通过按键事件的方法中的一个属性pressedButtons
,来获取当前按下的按键的值,但是这个值不是普通的值,所有要判断,就需要通过pressedButtons == Qt.什么什么
来判断
1 |
|
至于为什么在onClicked
中的pressedButtons
值是0
的问题,因为只有按钮按下的才会出现这个值,当松开后,按下的按键的值就会清零
动画
普通动画
通过PropertyAnimation
可以创建一个属性的动画,并且能够绑定在某个或多个组件中
而PropertyAnimation
需要以下属性,*
为必要
属性 | 值 | 说明 |
---|---|---|
id | 同上 | 设置id,以便可以访问里面的方法 |
target | 组件id | 绑定到组件,可以绑定多个格式为[组件1,组件2] * |
properties | 属性 | 将动画运用到哪个属性上* |
from | 属性值 | 动画开始状态,空位当前状态 |
to | 属性值 | 动画结束状态* |
duration | num | 动画事件,可省略,默认250,即0.25秒 |
easing.什么什么 | 属性值 | 设计动画曲线 |
例如:
1 |
|
当引用动画的id,可以设置动画的开始和暂停
其实除了PropertyAnimation
外,还有NumberAnimation
、ColorAnimation
,ColorAnimation
就少了properties属性,因为他只用设置颜色数值就行了,而NumberAnimation
只能设置数值属性的动画,例如:
1 |
|
自动触发动画
只要在PropertyAnimation
或[NumberAnimation
或ColorAnimation
]后面加on 属性
就行了
1 |
|
队列动画
通过SequentialAnimation
可以创建出队列动画
1 |
|
states动画
states
可以设置当前组件的属性多个状态,可以改变这个state
的值来设置不同的状态,PropertyChanges
记得绑定组件id
然后通过按钮事件去更改state
的值,让组件处于其他state
1 |
|
然后在组件内通过transitions
属性和Transition
组件来创建动画,我在动画中使用了两种不同的动画创建方法,都一样的,在Transition中,要设置好to属性,from可以省略,默认当前状态
1 |
|
行为动画
就是设置一个只要这个属性改变,就会有动画
形式就是Behavior on 属性{}
如果想引用已经设置好的行为动画可通过animation: 动画id
来设置
以下代码就是方块x或y坐标改变,会有弹性的动画:
1 |
|
Component和Loader
对于用Component包裹的组件,他不会立即将该组件生成到窗口
1 |
|
而要将Component里的组件显示出来需要Loader组件
1 |
|
可以通过事件,改变Loader组件加载的Component
1 |
|
如果用Loader的id去修改Component内的值,则需要通过loader1.item.属性
设置
1 |
|
图片组件
通过Image组件可以将资源里的图片文件加载出来,source就是资源的目标地址
如果图片的宽高都设置的话,可能会出现变形
1 |
|
动图加载
如果通过Image加载动图,那图片是不会动的,可以通过组件来加载动图,而且可以设置动图的一下状态
1 |
|