您必须将参数int
放在信号签名上,以使其将值传递给 slot。此外,切勿将参数名称放在SIGNAL(...)
/SLOT(...)
签名规范中。
...
QSlider *slider = new QSlider(Qt::Horizontal, this);
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(value(int)));
...
另外,请确保这value
是您班级的一个插槽,而不是一个独立的功能。我猜您已经将上面的代码放在类函数中,而不是放在 main 或任何其他独立函数中,因为在这些函数中没有this
定义。所以你所说的槽必须是一个成员函数,尤其是你正在编写此代码的类的 QObject 槽。更改
void value (int k) {
cout << k << endl;
}
到
void MyClass::value (int k) {
cout << k << endl;
}
并在您的类定义中MyClass
添加一个public slots:
部分:
class MyClass : public ... {
Q_OBJECT
...
public slots:
void value(int);
...
}
另外,给你的插槽一个有意义的名字,例如sliderChanged
,否则,混乱迟早会统治你的项目。