QML笔记-使用connect界面数据交互(qml中Designer使用)
程序运行截图如下:点击右边的sender左边会接收到数据:多次点击后:这里关键是记录两点:1.是qml界面不同控件数据的传输2.使用设计器完成简单的qml控件设计先来记录下qml中Designer的简单使用,这个比较简单。新建文件的时候选择这个即可:创建好后会有2个文件:一个是XXXX.qml一个是XXXXForm.ui....
程序运行截图如下:
点击右边的sender
左边会接收到数据:
多次点击后:
这里关键是记录两点:
1. 是qml界面不同控件数据的传输
2. 使用设计器完成简单的qml控件设计
先来记录下qml中Designer的简单使用,这个比较简单。
新建文件的时候选择这个即可:
创建好后会有2个文件:
一个是
XXXX.qml
一个是XXXXForm.ui.qml
如下面的这个:
首先看下Circle.qml
这里可以看到Circle.qml里面其实是CircleForm
进入CircleForm这个item,其实是CircleForm.ui.qml这个文件里面有一个item 如下:
下面构造一个如下的界面:
这里无需敲代码,直接用界面鼠标点点,弄出来。
设置大小,以及Rectangle的颜色
设置其布局
下面是设置为圆形
点下上面那个天蓝色的
然后Binding。即可。
添加一个text。设置字体以及大小:
这里把text和圆的部分属性Export Property as Alias
这样就可以了。看看代码:
这里一般在XXXXForm.ui.qml中设计器进行设计,
在XXXX.qml中设置那些动态属性啥的。比如下面的这个:
如下BackgroundForm.ui.qml
Background.qml
import QtQuick 2.4
BackgroundForm {
property Circle target: null
focus: true
Keys.onPressed: {
if(event.key == Qt.Key_Plus) target.width = target.width + 10
if(event.key == Qt.key_Minus) target.width = target.width - 10
}
}
或者新建一个去操作:
如下的这个Sender.qml
import QtQuick 2.0
Circle {
id: sendButton
property int counter: 0
property Receiver target: null
signal send(string value)
onTargetChanged: send.connect(target.receive)
MouseArea{
anchors.fill: parent
onClicked: {
counter++
parent.send(counter)
}
onPressed: parent.buttonColor = "green"
onReleased: parent.buttonColor = "blue"
}
}
下面是关于QML数据交互的
关键代码如下:
Sender.qml
import QtQuick 2.0
Circle {
id: sendButton
property int counter: 0
property Receiver target: null
signal send(string value)
onTargetChanged: send.connect(target.receive)
MouseArea{
anchors.fill: parent
onClicked: {
counter++
parent.send(counter)
}
onPressed: parent.buttonColor = "green"
onReleased: parent.buttonColor = "blue"
}
}
Receiver.qml
import QtQuick 2.0
Circle {
id: receiverButton
function receive(value){
displayText = value
clicknotify.running = true
}
SequentialAnimation on buttonColor {
id: clicknotify
running: false
ColorAnimation{
from: "red"
to: "blue"
duration: 250
}
ColorAnimation {
from: "blue"
to: "red"
duration: 250
}
}
}
main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Background {
id: background
clip: false
visible: true
anchors.fill: parent
target: sender
Receiver {
id: receiver
y: 148
displayText: "Receiver"
buttonColor: "#3170f0"
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 50
width: sender.width
}
Sender {
id: sender
x: 320
y: 148
width: 200
height: 200
displayText: "Send"
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
anchors.rightMargin: 50
target: receiver
}
}
}
从中可以看到:
Receiver有一个fuction是设置displayText的值。
在send中
在onTargetChanged信号中,使用connect关联这个recive函数
main.qml
Sender中,使用target指定要receiver的qml对象
源码打包下载地址:
https://github.com/fengfanchen/Qt/tree/master/QMLSignal

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)