QT学习记录之理解信号槽机制
作者:朱金灿
来源:http://blog.csdn.net/clever101
QT的事件机制采用的信号槽机制。所谓信号槽机制,简而言之就是将信号和信号处理函数绑定在一起,比如一个按钮被单击是一个信号,这个按钮的单击处理函数就是一个信号处理函数。因此信号槽机制是需要指定四个参数:信号发送者、发送者、信号接收者和信号处理函数。下面以一个简单的代码示例来说明:
#include "stdafx.h"
#include <QtGui/QApplication> int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPushButton* pButton = new QPushButton("Quit");
QObject::connect(pButton,SIGNAL(clicked()),&app,SLOT(quit())); pButton->show();
return app.exec();
}
在这段代码中,当单击按钮时,按钮会发送clicked()消息,这个消息可以连接到一个函数上(这个函数在这里成为slot)。这样,当一个消息发送时,slot函数可以自动执行。其中QObject::connect函数的语法如下:connect(snder,SIGNAL(signal),receiver,SLOT(slot));
Sender和receiver是QObject对象指针,signal和slot是不带参数的函数原型。SIGNAL()和SLOT()宏的作用是把他们转换成字符串。
信号槽机制有以下规则:
1.一个信号可以连接到多个槽,当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。
2.多个信号可以连接到一个槽,任何一个信号发出,槽函数都会执行。
3.一个信号可以和另一个信号相连,第一个信号发出后,第二个信号也同时发出。除始之外
,信号与信号连接上和信号和槽连接相同。
4.连接disconnect函数删除,这个函数很少使用,一个对象删除后,Qt自动删除这个对象的所有连接。
5.信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接。如果信号里的参数个数多于槽函数的参数,多余的参数被忽略。如果参数类型不匹配,或者信号和槽不存在,在debug状态时,Qt会在运行期间给出警告。如果信号和槽连接时包含了参数的名字,Qt将会给出警告。
QT学习记录之理解信号槽机制的更多相关文章
- Qt 学习之路 :信号槽
信号槽是 Qt 框架引以为豪的机制之一.熟练使用和理解信号槽,能够设计出解耦的非常漂亮的程序,有利于增强我们的技术设计能力. 所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被 ...
- QT写hello world 以及信号槽机制
QT是一个C++的库,不仅仅有GUI的库.首先写一个hello world吧.敲代码,从hello world 写起. #include<QtGui/QApplication> #incl ...
- QT学习之深入了解信号槽
槽函数和普通的 C++成员函数没有很大的区别.它们也可以使 virtual 的:可以被重写:可以使 public.protected 或者 private 的:可以由其它的 C++函数调用:参数可以是 ...
- Qt学习记录--02 Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
一 闲谈: 熟悉Window下编程的小伙伴们,对其消息机制并不陌生, 话说:一切皆消息.它可以很方便实现不同窗体之间的通信,然而MFC库将很多底层的消息都屏蔽了,尽管使用户更加方便.简易地处理消息,但 ...
- Qt信号槽机制理解
1. 信号和槽概述 > 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式(发布-订阅模式).当某个`事件`发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(s ...
- VJGUI消息设计-兼谈MFC、QT和信号/槽机制
星期六下午4点,还在公司加班.终于写完了下周要交工的一个程序. 郁闷,今天这几个小时写了有上千行代码吧?虽然大部分都是Ctrl-C+Ctrl-V,但还是郁闷. 作为一个有10年经验的MFC程序员,郁闷 ...
- QT信号槽机制
信号槽 信号槽是QT中用于对象间通信的一种机制,也是QT的核心机制.在GUI编程中,我们经常需要在改变一个组件的同时,通知另一个组件做出响应.例如: 一开始我们的Find按钮是未激活的,用户输入要查找 ...
- C++11实现Qt的信号槽机制
概述 Qt的信号槽机制是Qt的核心机制,按钮点击的响应.线程间通信等都是通过信号槽来实现的,boost里也有信号槽,但和Qt提供的使用接口很不一样,本文主要是用C++11来实现一个简单的信号槽,该信号 ...
- Qt开发之信号槽机制
一.信号槽机制原理 1.如何声明信号槽 Qt头文件中一段的简化版: class Example: public QObject { Q_OBJECT signals: void customSigna ...
随机推荐
- jQuery自定义插件规范
<ul class="list"> <li>导航列表 <ul class="nav"> <li>导航列表1< ...
- Vue神之大坑处理:获取通过URL的的参数不可直接操作
比如: $router.query['isZero'] == 'false'; //不会生效,刷新页面又好使了.打印处理是蓝色的false,再次刷新字体就变浅黑了. 解决:($router.quer ...
- 【Codeforces Round #455 (Div. 2) A】Generate Login
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举两个串的前缀长度就好. 组出来. 排序. 取字典序最小的那个. [代码] #include <bits/stdc++.h& ...
- [Vue + TS] Use Properties in Vue Components Using @Prop Decorator with TypeScript
With properties we can follow a one-way parent→child flow communication between components. This les ...
- vue实现多语言国际化(vue-i18n),结合element ui、vue-router、echarts以及joint等。
老板说我们的项目要和国际接轨,于是乎,加上了多语言(vue-i18n).项目用到的UI框架是element ui ,后续echarts.joint等全都得加上多语言. 一.言归正传,i18n在vue项 ...
- C# List 复制克隆副本
[C#技术] C# List 复制克隆副本数字人 发表于:2012-8-28 18:02:49废话不多说,看代码: 方法一: List<string> t = new List<st ...
- 【CS Round #43 D】Bad Triplet
[链接]点击打开链接 [题意] 给你n个点m条边的无权无向联通图; 让你找3个点A,B,C 使得A->B=B->C=A->C 这里X->Y表示点X到点Y的最短路长度. [题解] ...
- shell基础之符号与语法
shell脚本如今已经成为了一种非常普遍的脚本语言,之所以如此广泛的被应用,毋庸置疑它是有它的独到之处的.shell脚本语言和其它的语言比方说c/c++有何不同呢?c/c++等语言属于 ...
- amazeui学习笔记--css(基本样式2)--基础设置Base
amazeui学习笔记--css(基本样式2)--基础设置Base 一.总结 1.盒子模型:外margin,内padding,这里的内外指的边框 2.border-box:Amaze UI 将所有元素 ...
- GO语言学习(十一)Go 语言循环语句
Go 语言提供了以下几种类型循环处理语句: 循环类型 描述 for 循环 重复执行语句块 循环嵌套 在 for 循环中嵌套一个或多个 for 循环 语法 Go语言的For循环有3中形式,只有其中的一种 ...