0

Object::connect: 没有这样的信号 RollsRoyceTab::signal_aValueChange(int aValue) ??????

我有

class RollsRoyceTab : public QWidget
 {
     Q_OBJECT
 public:
     RollsRoyceTab(QWidget *parent = 0);
 public slots:
     void aValueChange(int);
     void bValueChange(int);
     void cValueChange(int);
     void rrValuesHolder(int aValue, int bValue, int cValue);
signals:
     void signal_aValueChange(int aValue);
     void signal_bValueChange(int bValue);
     void signal_cValueChange(int cValue);
 private:
.........
     int aValue, bValue, cValue;
 };

............
connect(this,SIGNAL(signal_aValueChange(int aValue)),this,SLOT(rrValuesHolder(int aValue, int bValue, int cValue))); 
 }

 void RollsRoyceTab::aValueChange(int aValue)
 {
     lcdAL->display(aValue);
     lcdAR->display(100 - aValue);

     emit signal_aValueChange(aValue);
 }

void RollsRoyceTab::rrValuesHolder(int aValue, int bValue, int cValue)
 {
     qDebug() << aValue;
     qDebug() << bValue;
     qDebug() << cValue;

 }

和连接(......这个,SLOT(rrValuesHolder(int aValue,int bValue,int cValue)));还是只需要写一个值 SLOT(rrValuesHolder(int aValue)) ?

4

2 回答 2

3

首先: QObject::connect() 中的信号和槽应该没有变量名。

第二:您不能将带有一个参数的信号与带有三个参数的 SLOT 连接起来。SIGNAL 的参数不得少于 SLOT。

它应该是例如:

connect(this,SIGNAL(signal_aValueChange(int)),this,SLOT(rrValuesHolder(int)));

这只是对此的解释。如果您发出带有一个参数的信号(例如 QString),插槽如何知道其他两个参数是什么?对我来说这是合乎逻辑的。

于 2013-03-11T19:04:39.090 回答
0

“SIGNAL() 宏的参数不得少于传递给 SLOT() 宏的签名。

所有这些都会起作用:

connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed(Qbject*)));
connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed()));
connect(sender, SIGNAL(destroyed()), this, SLOT(objectDestroyed()));

这不起作用:

connect(sender, SIGNAL(destroyed()), this, SLOT(objectDestroyed(QObject*)));

我相信你应该打电话给value SLOT(rrValuesHolder(int))

参考:http: //qt-project.org/doc/qt-4.8/signalsandslots.html

编辑:血液包括我忽略的另一条信息,信号和插槽应该在没有变量名的情况下连接!

于 2013-03-11T19:06:33.813 回答