0

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

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

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

我该怎么做?,在我提供的代码中,它接收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 回答