sinal and slot

介绍

信号和插槽用于对象之间的通信。
在GUI编程中,当我们更改一个小部件时,我们经常需要通知另一个小部件。更一般地说,我们希望任何类型的对象能够彼此通信。例如,如果用户单击“ 关闭”按钮,我们可能希望调用窗口的close()函数。

运行机制

一个对象发出信号,另一个对象给出自己的插槽处理,其中slot的参数个数可少于sinal的参数个数,当然参数可以使用默认参数,as:change(int i=0);

#include <QObject>
class Counter : public QObject
{
    Q_OBJECT
public:
    Counter() { m_value = 0; }
    int value() const { return m_value; }
public slots:
void setValue(int value)
    {
        if (value != m_value)
         {
            m_value = value;
            //===========定义函数,发生将会发射sinal=======
            emit valueChanged(value);
         }
    }  
signals:
    void valueChanged(int newValue,int oldvalue);
private:
    int m_value;
};
Counter a, b;
    QObject::connect(&a, SIGNAL(valueChanged(int)),
                     &b, SLOT(setValue(int)));
    a.setValue(12);     // a.value() == 12, b.value() == 12
    b.setValue(48);     // a.value() == 12, b.value() == 48
   QObject::connect(&ac, SIGNAL(valueChanged(int,int)),&bc, SLOT(setValue(int)));//can use a`s arguments bigger b`s arguments
connect(buttonGroup, QOverload<int, bool>::of(&QButtonGroup::buttonToggled),
    [=](int id, bool checked){ /* ... */ });
//不用signal和slot的connect的写法,了解一下

猜你喜欢

转载自blog.csdn.net/qq_33564134/article/details/81391254