【问题标题】:Connect an array to a signal slot mechanism in Qt将数组连接到 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

【问题讨论】:

    标签: c++ arrays qt signals-slots


    【解决方案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 我不知道为什么你的编辑建议被拒绝了,它显然是正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多