Qt5 Signal Slots

//
#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    // 不是调用emit的都要声明为slots,这里声明是因为要让他成为signal
    // slots的参数,可以少于signal的参数。
    void setValue(int value) {
        if (value != m_value) {
            m_value= value;
            emit valueChanges(value);
        }
    }

// 定义一个signal, signal只能是void类型
// signal代码有moc自动生成,不需要自己去实现这个方法
signals:
    void valueChanged(int newValue);

private:
    int m_value;
};
// 使用示例1 不好的做法
    connect(ui->startBtn, &QPushButton::released, this,&MainWindow::startGame);
// 使用示例2 安全的做法
// 这里SIGNAL,SLOT宏,估计是给 参数 生成 函数签名,从而判断是否安全
// 出现在SLOT宏中的函数,需要 声明类成员函数时,用public signal:
connect(ui->startBtn, SIGNAL(released()), this, SLOT(startGame()));
connect(scrollBar, SIGNAL(valueChanged(int)),label,  SLOT(setNum(int)));

-----------------------------

使用Lambda:
https://blog.csdn.net/csm201314/article/details/77914281