Qt Quick 事件处理之信号与槽-2(代码备忘)

个人学习的代码来处来自:http://blog.csdn.net/foruok/article/details/30028711

1.  hello_world.qml

主要的功能是:

1. 是点击按钮,两个文本的颜色会随机变化,并输出"textFirst"的文本内容

2. 输出Text , Button , Image 三个对象的C++原型

 1 import QtQuick 2.4
 2 import QtQuick.Controls 1.3
 3
 4 Rectangle {
 5     width: 320;
 6     height: 240;
 7     color: "gray";
 8
 9     Text {
10         id : textFirst;
11         anchors.horizontalCenter : parent.horizontalCenter ;
12         anchors.top : parent.top ;
13         anchors.topMargin : 20 ;
14         text : "first Text";
15         color : "orange";
16         font.pixelSize : 28;
17         onTextChanged : {
18           console.log(text);
19         }
20     }
21
22     Text {
23        id : textSecond ;
24        anchors.horizontalCenter : parent.horizontalCenter ;
25        anchors.top : textFirst.bottom ;
26        anchors.topMargin : 8 ;
27        text : "second Text" ;
28        color : "blue";
29        font.pixelSize : 28 ;
30     }
31
32     Button {
33        id : changeButton ;
34        anchors.top : textSecond.bottom ;
35        anchors.topMargin : 8 ;
36        anchors.horizontalCenter : parent.horizontalCenter ;
37        text : "点击变化字体颜色" ;
38        onClicked : {
39          textFirst.text = "First " + Math.random();
40        }
41     }
42
43     Image {
44         id : image1
45     }
46
47     Connections {
48         target : changeButton ;
49         onClicked : {
50             textFirst.color = Qt.rgba(Math.random() , Math.random() , Math.random() , 1);
51             textSecond.color = Qt.rgba(Math.random() , Math.random() , Math.random() , 1);
52         }
53     }
54
55     Component.onCompleted :{
56        console.log("QML Text‘s C++ type -",textFirst) ;
57        console.log("QML Button‘s C++ type - ",changeButton);
58        console.log("QML Image‘s C++ type - ",image1);
59     }
60
61 }

最终效果图是:

2. my_signal.qml

主要的功能是:

  1. 点击左下方的两个方块,会改变"Hello World"字体的颜色
  2. 在运行my_signal.qml时,会发送消息(messageReceived)
  3. 点击按钮,会执行按钮绑定的自定义的send()方法
  1 import QtQuick 2.3
  2 import QtQuick.Controls 1.3
  3
  4 Rectangle {
  5     width : 300 ;
  6     height: 240 ;
  7     color : "#C0C0C0" ;
  8
  9     id : relay ;
 10
 11     //定义一个信号槽
 12     signal messageReceived(string person,string notice);
 13     signal send();
 14     onSend : console.log("Send Clicked");
 15
 16     Button{
 17        id : sendButton ;
 18        text : "Click me to send";
 19        anchors.top : colorText.bottom;
 20        anchors.topMargin : 8;
 21        anchors.horizontalCenter : parent.horizontalCenter;
 22
 23     }
 24
 25     Component.onCompleted:{
 26         //使用connect 连接多个方法
 27         relay.messageReceived.connect(sendToPost);
 28         relay.messageReceived.connect(sendToTelegraph);
 29         relay.messageReceived.connect(sendToEmail);
 30         relay.messageReceived("Tom","Happy Birthday");
 31         sendButton.clicked.connect(send);
 32     }
 33
 34     function sendToPost(person,notice){
 35         console.log("Sending to post:" + person +","+notice);
 36     }
 37
 38     function sendToTelegraph(person,notice){
 39         console.log("Sending to telegraph:" + person + " , " + notice);
 40     }
 41
 42     function sendToEmail(person,notice){
 43         console.log("Sending to email:" + person + " , " + notice);
 44     }
 45
 46
 47
 48
 49     //最红变色的对象
 50     Text {
 51       id : colorText ;
 52       anchors.horizontalCenter : parent.horizontalCenter ;
 53       anchors.top : parent.top ;
 54       anchors.topMargin : 4 ;
 55       text : "Hello World";
 56       font.pixelSize : 32 ;
 57     }
 58
 59     Component {
 60         id : colorComponent ;
 61         Rectangle{
 62           id : colorPicker;
 63           width : 50;
 64           height : 50;
 65           signal colorPicked(color clr) ; //自定义的colorPicked方法
 66           MouseArea {
 67             anchors.fill : parent;
 68             onPressed : colorPicker.colorPicked(colorPicker.color)
 69           }
 70         }
 71     }
 72
 73     //动态创建一个红色的组件
 74     Loader{
 75       id : redLoader ;
 76       anchors.left : parent.left;
 77       anchors.leftMargin : 4 ;
 78       anchors.bottom : parent.bottom;
 79       anchors.bottomMargin : 4 ;
 80       sourceComponent : colorComponent ; //标明源组件
 81       onLoaded:{
 82         item.color = "red";
 83       }
 84     }
 85
 86     //动态创建一个蓝色的组件
 87     Loader{
 88       id : blueLoader ;
 89       anchors.left : redLoader.right;
 90       anchors.leftMargin : 4 ;
 91       anchors.bottom : parent.bottom;
 92       anchors.bottomMargin : 4 ;
 93       sourceComponent : colorComponent ; //标明源组件
 94       onLoaded:{
 95         item.color = "blue";
 96       }
 97     }
 98
 99     //红色组件的连接器
100     Connections {
101         target : redLoader.item;
102         onColorPicked :{
103            colorText.color = clr;
104         }
105     }
106
107     //蓝色组件的连接器
108     Connections {
109         target : blueLoader.item ;
110         onColorPicked : {
111             colorText.color = clr;
112         }
113     }
114
115 }

最终效果图是:

今天的学习暂时到这了,晚安,安~~

座右铭 : 人性最可怜的就是:我们总是梦想着天边的一座奇妙的玫瑰园,而不去欣赏今天就开在我们窗口的玫瑰。

时间: 2024-11-07 18:21:24

Qt Quick 事件处理之信号与槽-2(代码备忘)的相关文章

Qt on Android: Qt Quick 事件处理之信号与槽

前面两篇文章< Qt on Android:QML 语言基础>和<Qt on Android: Qt Quick 简单教程>中我们介绍了 QML 语言的基本语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经可以完成简单的 Qt Quick 应用了.接下来呢,哈,我们要介绍 Qt Quick 中一个灰常灰常重要的主题:事件处理.这将是比较长长长长的一篇,哦,不还有后续好几篇--废话少说,还是谈正事儿吧兄弟姐妹们. 本文参加 CSDN 博文大赛,请点这里投我一票,谢

Qt on Android: Qt Quick事件处理之鼠标、键盘、定时器

在<Qt on Android: Qt Quick 事件处理之信号与槽>中介绍了 QML 中如何使用内建类型的信号以及如何自定义信号,这次我们来看看如何处理鼠标.键盘.定时器等事件.这些时间在处理时,通常是通过信号来完成的. 广而告之:我正在参加 CSDN 博文大赛,请给我的参赛文章<Qt on Android: Qt Quick 事件处理之信号与槽>投票,谢谢. 鼠标事件处理 桌面开发的话,难免要处理鼠标事件-- 变色矩形示例 看一个简单的处理鼠标事件的例子,先看代码(handl

Qt on Android: Qt Quick 事件处理之捏拉缩放与旋转

上一篇<Qt on Android: Qt Quick事件处理之鼠标.键盘.定时器>我们介绍了常见的鼠标.键盘.定时器的处理,鼠标.键盘都是电脑上我们最常使用的事件,这节我们来介绍 Android 智能手机上的一个非常重要的手势:捏拉手势.捏拉手势最早在苹果手机上得到应用,苹果还曾经尝试为此操作申请专利,借以钳制三星在美国的手机和平板销售.这些我们且不管它,咱们只说在 Qt Quick 中如何处理捏拉手势. 广而告之:我正在参加 CSDN 博文大赛,请给我的参赛文章<Qt on Andr

2.QT-窗口组件(QWidget),QT坐标系统,初探消息处理(信号与槽)

本章主要内容如下: 1) 窗口组件(QWidget) 2) QT坐标系统 3) 消息处理(信号与槽) 介绍 Qt以组件对象的方式构建图形用户界面 Qt中没有父组件的顶级组件,则被叫做窗口 组件的类型分为: 容器类(父组件)  :  用于包含功能的界面组件 功能类(子组件)  :  用于实现特定的交互功能 如下图所示: 比如上面的QgroupBox ,即属于顶级组件的功能类(子组件),又是3个功能类组件的父组件(容器) 组件继承 Qt中所有窗口组件都继承于QWidget类,而QWidget类又继承

QT学习小结之信号与槽

信号与槽函数是我们学习QT必备的基础知识,今天跟大家分享我学习QT的一些总结吧. 信号槽机制是Qt编程的基础.通过信号槽,能够使Qt各组件在不知道对方的情形下能够相互通讯. 槽函数和普通的C++成员函数没有很大的区别.它们也可以使virtual的:可以被重写:可以使public.protected或者private的:可以由其它的C++函数调用:参数可以是任何类型的.如果要说区别,那就是,槽函数可以和一个信号相连接,当这个信号发生时,它可以被自动调用. 信号与槽函数的连接我们可以用connect

Qt 和 Boost关于信号和槽的对比说明

对比 无论是 Qt 的实现方式还是 Boost 的实现方式,除了必须的定义信号和槽的类之外,都不需要额外的类. 两种实现都解决了类爆炸的问题.下面让我们对照着来看一下我们前面的分析. 两个不同的术语以及各自的动作:信号和槽: 在一个地方(信号)可以连接零个或者多个回调函数(槽)同时也是多对多的,一对多,多对多: 焦点在于连接本身,而不是提供者或者消费者: 不需要手工为了一个连接创建新的类: 连接仍旧是类型安全的. 这五点是信号槽系统的核心,Qt 和 boost 都拥有这些特性. 下面则是二者的不

Qt杂记——布局、信号与槽

1.布局设置拉伸: ui->TopLayout->setStretch(0,1); //left ui->TopLayout->setStretch(1,4); //right 就是说横向布局之中有两个控件.那么根据初始化的顺序默认index为0,1,所以分别设置两个控件的拉伸比例,上述代码中即为1:4显示. 2.信号与槽注意事项: connect()中信号与槽函数若有参数只能写类型,不能带参数名字,如: connect(this,SIGNAL(itemClicked(QTreeW

C/C++ -- Gui编程 -- Qt库的使用 -- 信号与槽 -- 欢迎界面

程序运行先显示一个对话框,确定进入主程序 1.新建Qt工程,类MyWidget,基类QWidget 2.新建设计师界面类MyDialog,基类QDialog 3.-----main.cpp----- 1 #include "mywidget.h" 2 #include "mydialog.h" 3 #include <QApplication> 4 5 int main(int argc, char *argv[]) 6 { 7 QApplication

Qt Quick鼠标事件处理、键盘、计时器

在<Qt Quick 事件处理之信号与槽>中介绍了 QML 中怎样使用内建类型的信号以及怎样自己定义信号,这次我们来看看怎样处理鼠标.键盘.定时器等事件.这些时间在处理时,一般是通过信号来完毕的. 鼠标事件处理 桌面开发的话,难免要处理鼠标事件-- 变色矩形演示样例 看一个简单的处理鼠标事件的样例,先看代码(handle_mouse.qml): import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 320; heig