将数组连接到 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 中的信号槽机制的主要内容,如果未能解决你的问题,请参考以下文章