Как использовать QSlider для переменной
Возможный дубликат:
Использование QSlider для изменения значения переменной
Я пытаюсь использовать QSlider для изменения значения переменной: вот часть кода:
....
QSlider *slider = new QSlider(Qt::Horizontal,0);
connect(slider,SIGNAL(valueChanged()),this,SLOT(value(int k)));
...
значение функции это слот, который я хочу использовать, скажем так:
void value (int k ) {
cout<< k << endl;
}
проблема в том, что при перемещении ползунка ничего не происходит.?
заранее спасибо
2 ответа
Вы должны поставить аргумент int
на сигнатуре сигнала, чтобы передать значение в слот. Кроме того, никогда не помещайте имена аргументов в SIGNAL(...)
/ SLOT(...)
характеристики подписи.
...
QSlider *slider = new QSlider(Qt::Horizontal, this);
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(value(int)));
...
Кроме того, убедитесь, что value
это слот вашего класса, а не отдельно стоящая функция. Я полагаю, вы уже поместили приведенный выше код в функцию класса, а не в основную или любую другую отдельно стоящую функцию, потому что в них нет 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
иначе хаос будет править вашим проектом рано или поздно наверняка.
Из qt doc:
http://doc.qt.digia.com/qt/qabstractslider.html
void QAbstractSlider::valueChanged ( int value ) [signal]
Я предполагаю, что во время выполнения он не может найти сигнал valueChanged(), поэтому может быть изменен:
...
connect(slider, SIGNAL(valueChanged(int)), this, SLOT(value(int)));
...
Надеюсь, это поможет.