将阵列连接到Qt中的信号槽机制

时间:2013-03-05 13:06:50

标签: c++ arrays qt signals-slots

我创建了一个QSlider *x_slider[8]数组,现在我想创建一个像这样的插槽的连接,

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

但由于我不想为x_slider数组中的每个滑块创建一个插槽,int插槽中收到的slider_x在这种情况下应为0。

我该怎么办?在我提供的代码中,它从int

收到ValueChanged

2 个答案:

答案 0 :(得分:3)

您可以连接您的阵列中的每个QSlider,然后在您的插槽slider_x中,您可以找到通过sender()功能发送信号的滑块。 http://apidocs.meego.com/1.2/qt4/qobject.html#sender

只需遍历你的数组,并且发送者()返回的指向对象的指针等于数组中的QSlider,这意味着你找到了你对数组的指示。

答案 1 :(得分: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();
    ...
}