您必须将参数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,否则,混乱迟早会统治你的项目。