QT值SIGNAL() 和 SLOT()

下面是一个信号与槽函数之间的实现机制:

  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();
原创文章 59 获赞 39 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_28174951/article/details/78345420