我试图使用QSlider来更改变量值:下面是代码的一部分:
....
QSlider *slider = new QSlider(Qt::Horizontal,0);
connect(slider,SIGNAL(valueChanged()),this,SLOT(value(int k)));
...函数值是我想要使用的一个槽,比方说如下:
void value (int k ) {
cout<< k << endl;
}我的问题是当我移动滑块时什么都不会发生。?
提前感谢
发布于 2013-01-02 13:28:16
您必须将参数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,否则,混乱迟早会支配你的项目。
发布于 2013-01-02 13:27:45
来自qt医生:
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)));
...希望这能有所帮助。
https://stackoverflow.com/questions/14122695
复制相似问题