不兼容的发件人/收件人参数

时间:2015-03-08 17:55:45

标签: qt qpushbutton

我想写一个Signalmapper。它应该将按钮连接到一个功能。这个函数应该得到点击的Qpushbutton本身。

   void StrategicWidget::addTransporterImages(int i,unsigned int  numberTransporters)
      {
      Planet* p = PLANETS_VEC[i];
      QString qBasePath = QString::fromStdString(basePath);
       for(int j=0; j<numberTransporters; j++)
      {
         QPushButton* button = new QPushButton("", this);
         button->setGeometry(QRect(QPoint(p->getXCoord() + 30 + 15*j, p->getYCoord()+ 30 + 15*j), QSize(53, 53)));
         QString css = "background-image: url(" + qBasePath + "/Transporter.png)";
         button->setStyleSheet(css);  // sets button background image

      /*
       *SignalMapper zum festlegen welcher transporter der zu bewegende Transporter ist.
       *
       */
      QSignalMapper* transporterMapper = new QSignalMapper (button);
      // connecting button signal with signal mapper
       connect (button, SIGNAL(clicked()), transporterMapper, SLOT(map())) ;

      // giving parameter to the buttons
      transporterMapper->setMapping (button, button); 
      // map the signalMapper mapped signal to the transporterIconClicked-Slot of this widget
      connect (transporterMapper, SIGNAL(mapped(int)), this, SLOT(transporterIconClicked(QPushButton*)));

      }
    }

为什么我在运行时收到此错误消息?

  

QObject :: connect:不兼容的发送者/接收者参数QSignalMapper :: mapped(int) - &gt;小行星:: StrategicWidget :: transporterIconClicked(QPushButton *)

我知道其他一些帖子也包含这个问题,但解决方案并不适用于我。

1 个答案:

答案 0 :(得分:0)

好吧,您将带有int参数的信号连接到采用QPushButton*的广告位。你有什么期望?它无法工作。

您需要做的是将mapped(QWidget*)信号连接到采用QWidget*的广告位,然后确保您确实获得了一个按钮:

void addTransporterImages(int i, unsigned int numberTransporters) {
  ...
  connect (transporterMapper, SIGNAL(mapped(QWidget*)), 
    SLOT(transporterIconClicked(QWidget*)));
  ...
}

Q_SLOT void transporterIconClicked(QWidget * widget) {
  auto button = qobject_cast<QPushButton*>(widget);
  if (!button) return;
  ....
}
相关问题