//
#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