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

Posted

技术标签:

【中文标题】将数组连接到 Qt 中的信号槽机制【英文标题】:Connect an array to a signal slot mechanism in Qt 【发布时间】:2013-03-05 13:06:49 【问题描述】:

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

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

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

我该怎么做?在我提供的代码中,它从ValueChanged接收int

【问题讨论】:

【参考方案1】:

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

只需循环遍历您的数组,并且 sender() 返回的指向对象的指针等于数组中的 QSlider 将意味着您找到了数组的索引。

【讨论】:

【参考方案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();
    ...

【讨论】:

@SamuelNLP 我不知道为什么你的编辑建议被拒绝了,它显然是正确的。

以上是关于将数组连接到 Qt 中的信号槽机制的主要内容,如果未能解决你的问题,请参考以下文章

qt 线程与ui线程同步

dbus会话连接:用qt槽连接dbus信号,怎么做?

QT开发(十三)——QT信号与槽机制

无法将信号连接到 main() 中的函数

qt中c语言函数发送qt信号

Qt--信号与槽机制