QT 信号与槽

QT 信号与槽

GUI程序,为了处理用户的的点击事件,一般是用的回调函数去处理事件,但QT独创了一种信号与槽的机制,通过信号与槽的绑定,事件发出信号,由槽处理。信号与槽的连接主要是关于 connect()函数,它让两个互不相干的对象连接起来,当一个对象的状态改变时,可以通知另一个对象。

关于 connect()函数

和普通的C++成员函数很像,可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的(protected),它们可以像任何c++成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。信号和槽函数间的链接通过connect实现。

connect函数原型

connect(QObject *sender,   char *signal,QObject *receiver, char *method);
connect(QObject *sender,   PointerToMemberFunction signal,QObject *receiver, PointerToMemberFunction method);
connect(QObject *sender,   PointerToMemberFunction signal,QObject *context,  Functor functor);
connect(QObject *sender,   QMetaMethod &signal,QObject *receiver, QMetaMethod &method);
connect(QObject *sender,   PointerToMemberFunction signal,  Functor functor);
注释
  1. sender 为信号发送者,receiver 为信号接收者,它们都是对象指针。
  2. connect() 函数返回值类型为QMetaObject::Connection,表示当前连接句柄。最后一个参数为Qt::ConnectionType type = Qt::AutoConnection,表示连接类型 一般默认。

1. 一个信号可以连接到多个槽

connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(updateStatusBar(int)));

将滑块的值改变信号,连接微调框的设置值大小的槽和当前对象的更新状态栏的槽。

当信号发出后,槽函数都会被调用,但是调用的顺序不确定,随机的。

2. 多个信号可以连接到一个槽

connect(lcd, SIGNAL(over()), this, SLOT(handleError());
connect(calculator, SIGNAL(divisionError()), this, SLOT(handleError()));

将lcd的over()信号和计算器的divisionError()信号与当前对象的handleError()的槽连接。

任何一个信号发出,槽函数都会被执行。

3.一个信号可以和另一个信号相连

connect(lineEdit, SIGNAL(textChanged(Qstring &)), this, SIGNAL(update(Qstring &)));

将文本框的文本改变信号与当前对象的更新信号相连。

第一个信号发出后,第二个信号也同时发送,除此之外,信号与信号连接上,和信号和槽连接相同。

注:信号和槽函数必须有着相同的参数类型。

这样信号和槽函数才能成功连接。如果信号里的参数个数多余槽函数的参数,多余的参数被忽略:

connect(ftp, SIGNAL(rawReply(int, const Qstring &)), this, SLOT(checkError(int)));

如果参数类型不匹配,或者信号和槽不存在,则当应用程序使用debug模式构建后,Qt会在运行期间发出警告。如果信号和槽连接时包含了参数的名字,Qt将会给出警告。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值