如何在变量中使用QSlider

时间:2013-01-02 13:11:20

标签: c++ qt

  

可能重复:
  Using QSlider to change the value of a variable

我正在尝试使用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;
}

我遇到的问题是当我移动滑块时没有任何反应。 ?

提前致谢

2 个答案:

答案 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)));
...

希望有所帮助。