1

重複の可能性:
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;
}

私が抱えている問題は、スライダーを動かしても何も起こらないことです。?

前もって感謝します

4

2 に答える 2

11

値を slotintに渡すには、シグナル署名に引数を付ける必要があります。また、/署名仕様に引数名を入れないでください。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ください。

于 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 に答える