下面是一个信号与槽函数之间的实现机制:
QT里面独立于c++的一种通信机制,通过connect()函数来实现
,当我们通过connect函数将信号与槽连接起来,当我们用对象a或者对象b调用函数setvalue()函数时,他们会同时发射出信号,但是,我们只要通过connect()函数,将信号与槽相连,这样我们就能将信号与槽函数绑定在一起。
int value() const {return val;}
public slots:
void setValue(int);
signals:
void valueChanged(int);
private:
int val;
MainWindow a,b;
QObject::connect(&a,SIGNAL(valueChanged(int)),&a,SLOT(setValue(int)));
b.setValue(11);
a.setValue(9); //
b.value(); //b is not 9 ,but 11
b.setValue(11);
/*
在以上程序中,一旦信号与反应槽连接,当执行a.setValue(a)时就会释放出一个valueChanged(int)的信号,
对象b将会收到这个信号并触发setValue(int)这个函数。当b在执行setValue(int)这个函数时,它也将释放
valueChanged(int)这个信号,当然b的信号无人接收,因此就什么也没干。请注意,在样例中我们仅当输入变量v
不等于val时才释放信号,因此就算对a与b进行了交叉连接也不会导致死循环的发生。由于在样例中使用了Qt特有的
关键字和宏,而Qt本身并不包括C++的编译器,因此如果用流行的编译程序(如Windows下的Visual C++或Linux下
的gcc)是不能直接编译这段代码的,必须用Qt的中间编译工具moc.exe把该段代码转换为无专用关键字和宏的C++代码
才能为这些编译程序所解析、编译与链接。
*/
qDebug()<<"the value of b is "<<b.value()<<endl;
MainWindow w;
w.show();