我正在尝试使用QSlider来更改变量值: 这是代码的一部分:
....
QSlider *slider = new QSlider(Qt::Horizontal,0);
connect(slider,SIGNAL(valueChanged()),this,SLOT(value(int k)));
...
函数值是我想要使用的SLOT,让我们这样说:
void value (int k ) {
cout<< k << endl;
}
我遇到的问题是当我移动滑块时没有任何反应。 ?
提前致谢
答案 0 :(得分:9)
您必须将参数int
放在信号签名上,以使其将值传递给插槽。此外,请勿将参数名称放在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
,否则,混乱会迟早会确定您的项目。
答案 1 :(得分:0)
来自qt doc:
http://doc.qt.digia.com/qt/qabstractslider.html#valueChanged
void QAbstractSlider::valueChanged ( int value ) [signal]
我猜测在运行时它找不到valueChanged()信号,所以可能会改变:
...
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(value(int)));
...
希望有所帮助。