QT信号槽
来源:互联网 发布:spectrum 网络 编辑:程序博客网 时间:2024/05/28 15:14
信号槽是Qt中特有的概念。它使得程序员将不同的object绑定起来,而object对象间并不需要对相互了解。 Slots也是普通的c++方法,它们可以是virtual;可以被重载;可以使private、protected、public,可以像其它c++方法一样有各种类型的参数,Signals则无这些属性。它们唯一的区别就是signal与slot是相互链接起来的,slot函数在每次signal函数被emit时会被调用。
声明信号,跟函数不一样,不需要定义
signals:
void mySignal();
void mySignal(int x);
void mySignalParam(int x,int y);
在用到的地方发送信号(先建立了信号与槽的连接,才能接受信号)
emit mySignal();
声明槽,slots有public等属性,槽就相当于定义的一个函数,在里面实现某些功能。
public slots:
void mySlot();
void mySlot(int x);
void mySlot(int x,int y);
连接信号signal和槽函数slot:
connect(sender, SIGNAL(mySignal()), receiver, SLOT(mySlot()));
sender和receiver是QObject对象的指针,signal和slot函数是不带参数的函数名,实际上SIGNAL()和SLOT()宏将他们的参数(signal和slot函数)转换成相应的字符串。
注意
1、一个信号可以连接到多个槽:
connect(sender, SIGNAL(mySignal(int)),receiver1, SLOT(mySlot(int)));
connect(sender, SIGNAL(mySignal(int),receiver2, SLOT(mySlot(int)));
当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。
2、多个信号可以连接到同一个槽
connect(sender1 SIGNAL(mySignal1()), receiver, SLOT(mySlot()));
connect(sender2, SIGNAL(mySignal2()),receiver, SLOT(mySlot()));
任何一个信号发出,槽函数都会执行。
3、一个信号可以和另一个信号相连
connect(sender, SIGNAL(mySignal1()),
this, SIGNAL(mySignal2()));
第一个信号发出后,第二个信号也同时发送。除此之外,信号与信号的连接和信号与槽连接相同。
4、连接可以被删除
disconnect(sender, SIGNAL(mySignal()),receiver, SLOT(mySlot()));
这个函数很少使用,因为当一个对象被删除后,Qt自动删除这个对象的所有连接。
5、参数设置
信号和槽函数必须有着相同的参数类型及顺序,这样信号和槽函数才能成功连接:
connect(sender, SIGNAL(mySignal(int, const QString &)),receiver, SLOT(mySlot(int, const QString &)));
如果信号里的参数个数多于槽函数的参数,多余的参数被忽略:
connect(sender, SIGNAL(mySignal(int, const QString &)),receiver, SLOT(mySlot(int)));
6、获得对象
QObject * QObject::sender () const [protected]
sender () 函数返回 信号发出者 的 QObject型指针。
对QObject型指针进行强制转换得到需要的。
在槽函数里使用得到信号发送对象。
例如:
mySlot(){
currentGlWidget = qobject_cast<GLWidget *>(sender());
QPushButton* btn= dynamic_cast<QPushButton*>(sender())
}
带返回值的信号槽
槽函数有返回值
可通过 value = emit mysignal() 得到返回值。
- Qt 信号与信号,信号与槽
- QT---QT的信号槽
- qt 槽与信号
- QT信号与槽
- Qt信号和槽
- QT 信号与槽
- QT信号和槽
- QT信号槽
- QT信号和槽
- QT信号与槽
- Qt信号与槽
- QT信号槽
- QT 信号和槽
- Qt ---- 信号和槽
- Qt 之 信号槽
- Qt信号与槽
- QT信号和槽
- QT信号与槽
- s5pc110烧录
- 在外部PHP文件中引用Magento代码
- ESFramework 4.0 性能测试
- qt socket通信
- Magento中使用jQuery与Prototype库冲突的解决办法
- QT信号槽
- 用visio画UML类图
- ubuntu 12.04 desk top 64bit 下安装vmware tools
- 外企职位缩写
- ESFramework Demo -- 文件传送Demo(附源码)
- 摄影师必须掌握的12条经典摄影法则
- Python获得脚本当前绝对路径的两种方法
- bitmap 内存溢出
- ESFramework Demo -- P2P通信Demo(附源码)