Как использовать 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)));
...

Надеюсь, это поможет.

Другие вопросы по тегам