1

可能重复:
使用 QSlider 更改变量的值

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

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

提前致谢

4

2 回答 2

11

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

于 2013-01-02T13:28:16.127 回答
0

来自 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)));
...

希望有帮助。

于 2013-01-02T13:27:45.677 回答