QML小例子【QML工程里信号与槽】
1、效果

代码参考B站视频:https://www.bilibili.com/video/av36584062
功能:点击左边,会发出信号,右边会有个颜色动画,然后计数+1
2、分析:
一共有两个对象,他们很多属性都差不多,如可变颜色、原型、可变text..所以可以声明一个Circle对象,然后Sender和Recver都继承它;
能够通过Sender控制Recver,那么Sender一定有信号发出,然后Recver有一个函数用于状态改变;
应该在发出信号的地方即Sender里,连接信号与槽,根据总结:https://www.cnblogs.com/judes/p/11243242.html,这里属于QML的信号QML的槽,所以应该直接使用signal.connect(slot)的形式,但是怎么在Sender中访问到Recver的槽函数呢?
可以这样:在Sender里加一个Recver属性,初始化为null,然后在这个Recver的onRecverChanged回调中,connect。
3、图形基类Circle.qml
import QtQuick 2.0
Item {
width: 200
height: 200
property alias circlrColor: circlr.color
property alias contentText: content.text
Rectangle {
id: circlr
color: "#f94141"
radius: width*0.5
anchors.fill: parent
Text {
id: content
x: 93
y: 94
color: "#e5d9d9"
text: qsTr("Text")
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
font.pixelSize: 30
}
}
}
这里需要注意:
property alias circlrColor: circlr.color
property alias contentText: content.text
我是直接在设计界面直接导出别名属性:

这个别名属性即alias,外界可以通过改变这个变量直接改变到对应的控件属性。
4、Sender.qml
import QtQuick 2.0
Circle {
id: sender
property int counter: 0
signal sendSignal(string value)
property Recver target:null
onTargetChanged: {
sendSignal.connect(target.recvSlot)
}
MouseArea {
anchors.fill: parent
onClicked: {
sender.counter++
sender.sendSignal(counter)
}
onPressed: {
sender.circlrColor="red"
}
onReleased: {
sender.circlrColor="blue"
}
}
}
核心就是在红色的地方,将null Recver作为自己的属性,然后在main里赋值,当赋值成功就连接信号与槽
5、Recver.qml
import QtQuick 2.0
import QtQuick 2.7
Circle {
id: recver
function recvSlot(value)
{
contentText=value;
colorNotify.running=true;
} SequentialAnimation on circlrColor {
id: colorNotify
running: false ColorAnimation {
from: "red"
to: "blue"
duration: 200
} ColorAnimation {
from: "blue"
to: "red"
duration: 200
}
}
}
这里有个重点就是红色部分,即序列动画,里面的动画按照顺序执行,看文档或者资料都没有SequentialAnimation on circlrColor的用法,这里是直接作用于颜色【很多QML的骚用法在文档里都找不到,这也是我认为阻挡我学习QML的难处】
6、main.qml
import QtQuick 2.9
import QtQuick.Window 2.2 Window {
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World") Background {
id: background
anchors.fill: parent Recver {
id: recver
x: 359
y: 128
circlrColor: "#ff0000"
contentText: "Recver"
anchors.verticalCenterOffset: 0
anchors.verticalCenter: parent.verticalCenter
} Sender {
id: sender
x: 79
y: 140
target: recver
circlrColor: "#0000ff"
contentText: "Sender"
anchors.verticalCenterOffset: 0
anchors.verticalCenter: parent.verticalCenter
}
}
}
Background可不管,就是个简单的背景qml
QML小例子【QML工程里信号与槽】的更多相关文章
- [QT][转载] Qt信号和槽
From: http://blog.csdn.net/rl529014/article/details/51346955 GUI 程序除了要绘制控件,还要响应系统和用户事件,例如重绘.绘制完成.点击鼠 ...
- Qt对象模型之一:信号和槽
一.信号和槽机制概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal).这种发出是没有目 ...
- QML之信号与槽
一.C++的信号和QML的槽 前言: Qt中的信号与槽,通常是一个信号SIGNAL和一个槽SLOT,通过connet连接,而QML中不需要再写槽函数,只需要在合适的地方告诉QML:如果x信号产生则执行 ...
- Spring.Net在ASP.NET Mvc里使用的一个小例子
就贴个小例子,就不注意格式了. 1.下载dll NuGet的下载地址:http://docs.nuget.org/docs/start-here/installing-nuget 在vs的NuGet里 ...
- QML于C++交互之信号与槽(signal&slot )
connect c++ SIGNAL with QML SLOT 简介 QML 与 C++ 混合编程时,总结了一下qml和c++互相直接调用.及信号与槽连接 的几种情况,详细使用情况看示例代码 所有的 ...
- spring小例子-springMVC+mybits整合的小例子
这段时间没更博,找房去了... 吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了.. 搬家太 ...
- 在 C++Builder 工程里使用 Visual C++ DLL(3个工具) good
译者序: 第一次读这篇文章是在 2001 年 10 月,帮我解决了一点小问题.本来不好意思翻译,因为英语水平实在太差.最近发现不少网友在问在 C++Builder 的工程里调用 Visual C++ ...
- QML Object Attributes QML对象属性
QML Object Attributes Every QML object type has a defined set of attributes. Each instance of an obj ...
- vuex2.0+两个小例子
首先vuex概念比较多,一定要搞懂里面的概念,可以参考官网Vuex2.0概念,我写此文的目的是希望能对前端爱好者提供个参考,加深对vuex2.0各核心概念的理解. 废话少说,直接上干货.这是官网上的一 ...
随机推荐
- Maven创建本地仓库
1:创建仓库目录 在D盘Program Files目录下创建repository目录 2:修改settings.xml D:\ProgramFiles\repository 是我们创建的本地 ...
- Selenium常用API的使用java语言之10-获取断言信息
不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较.这个比较的称之为断言. 我们通常可以通过获取title .URL和text等信息进行断言.text方法在前面已经讲过,它用于获取 ...
- 2019年java技术大盘点
福州SEO:2019年互联网企业在Java开发中有哪些主流.热门的IT技术呢,下面让我们来看一下. 微服务技术 微服务架构主要有:Spring Cloud. Dubbo. Dubbox等,以 Dubb ...
- Codeforces Round #597 (Div. 2) A. Good ol' Numbers Coloring
链接: https://codeforces.com/contest/1245/problem/A 题意: Consider the set of all nonnegative integers: ...
- Copy Books
Description Given n books and the i-th book has pages[i] pages. There are k persons to copy these bo ...
- navigator对象及属性(userAgent)(扩展)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 39、扩展原理-BeanFactoryPostProcessor
39.扩展原理-BeanFactoryPostProcessor BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的 BeanFactoryPostPro ...
- [Javascript] Construct a Regex to Match Twitter Mentions with Regexr
regexr is a powerful tool for debugging existing regexes and creating new ones. In this lesson, we'l ...
- 064_将 Linux 系统中 UID 大于等于 1000 的普通用户都删除
#!/bin/bash#先用 awk 提取所有 uid 大于等于 1000 的普通用户名称#再使用 for 循环逐个将每个用户删除即可 user=$(awk -F: '$3>=1000{prin ...
- MondoDB介绍 Python与MongoDB用法,安装PyMongo
http://blog.csdn.net/t_ells/article/details/50265889 MongoDB最新版本下载在官网的DownLoad菜单下:http://www.mongodb ...