将数组连接到Qt中的信号槽机制

Connect an array to a signal slot mechanism in Qt

本文关键字:信号 机制 Qt 数组 连接      更新时间:2023-10-16

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

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

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

我该怎么做呢?,在我给出的代码中,它从ValueChanged

接收int

你可以从你的数组中连接每个QSlider,然后在你的插槽slider_x中,你可以找出,什么slider通过sender()函数发送信号。http://apidocs.meego.com/1.2/qt4/qobject.html发送者

只是循环通过你的数组,和指向对象的指针,由sender()返回等于QSlider在一个数组将意味着,你找到你的数组索引

使用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();
    ...
}