信号与曹
信号与曹为对象之间的通信提供了方便。信号(signal)就是信号源发出的信号,曹(slot)是信号的接收端,信号与曹之间需要建立连接才能通信。如果要使用信号与曹必须在类定义中包含Q_OBJECT宏而且必须继承QObject类或者其子类。信号与信号之间可以建立连接,信号与曹之间的关系可以是一对一,一对多,多对多。例如:signalAndSlot.h#include <QObject>class SignalAndSlot : public QObject{
Q_OBJECTpublic:explicit SignalAndSlot(int v,QObject *parent = 0);int getValue();signals:void valueChanged(int newValue);public slots:void setValue(int newValue);private:int value;};
signalAndSlot.cpp#include "signalandslot.h"SignalAndSlot::SignalAndSlot(int v,QObject *parent) :QObject(parent){
value=v;}
int SignalAndSlot::getValue(){
return value;}
void SignalAndSlot::setValue(int newValue){
value=newValue;emit valueChanged(newValue);}
main.cpp#include <QtGui/QApplication>#include "signalandslot.h"#include <QDebug>int main(int argc, char *argv[]){
QApplication a(argc, argv);
SignalAndSlot x(5);SignalAndSlot y(6);SignalAndSlot z(7);QObject::connect(&x,SIGNAL(valueChanged(int)),&y,SIGNAL(valueChanged(int)));//x的信号与y的信号连接QObject::connect(&y,SIGNAL(valueChanged(int)),&z,SLOT(setValue(int)));//y的信号与z的曹连接
x.setValue(10);//改变x的值将发出一个信号,y接受到之后直接发出该信号,最后z接收到y发送的信号而改变z的值。qDebug()<<"x="<<x.getValue()<<" y="<<y.getValue()<<" z="<<z.getValue();return a.exec();}
输出结果是:x= 10 y= 6 z= 10