0

アレイを作成QSlider *x_slider[8]しましたが、次のようなスロットへの接続を作成したいと思います。

connect(x_slider[0], SIGNAL(valueChanged(int)), this, SLOT(slider_x(int)));

x_sliderしかし、配列内のすべてのスライダーにスロットを作成したくないので、この場合、int受信したスロットは 0 でなければなりません。slider_x

どうすればそれを行うことができますか?、私が提示するコードでは、intからを受け取りますValueChanged

4

2 に答える 2

3

配列からすべての QSlider を接続すると、スロットslider_xで、どのスライダーが関数を介して信号を送信したかを確認できますsender()http://apidocs.meego.com/1.2/qt4/qobject.html#sender

配列をループするだけで、sender() によって返されるオブジェクトへのポインターが配列内の QSlider に等しいということは、配列のインデックスが見つかったことを意味します。

于 2013-03-05T13:15:22.917 に答える
2

次を使用しQSignalMapperます。

auto sigMap = new QSignalMapper( this );
for ( int i = 0; i < 8; ++i ) {
    x_slider[i] = new QSlider( this );
    connect( x_slider[i], SIGNAL( valueChanged( int ) ),
             sigMap, SLOT( map() ) );

    sigMap->setMapping( x_slider[i], i );
}
connect( sigMap, SIGNAL( mapped( int ) ),
         this, SLOT( slider_x( int ) ) );

void MyClass::slider_x( int i )
{
    int value = x_slider[i]->value();
    ...
}
于 2013-03-05T13:32:07.233 に答える