简体   繁体   中英

No such Slot/Signals (Qt)

Object::connect: No such signal RollsRoyceTab::signal_aValueChange(int aValue) ??????

I have

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;

 }

and connect(...... this,SLOT(rrValuesHolder(int aValue, int bValue, int cValue))); or need write only one value SLOT(rrValuesHolder(int aValue)) ?

First: signals and slots in QObject::connect() should be without variables names.

Second: You can't connect signal with one argument with SLOT with three arguments. SIGNAL must not have fewer arguments than the SLOT.

It should be for eg:

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

And it's simply explanation for that. If you emit signal with one argument (for eg QString) how would slot know what are others two arguments? For me it's logical.

"SIGNAL() macro must NOT have fewer arguments than the signature passed to the SLOT() macro.

All of these would work:

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

This does not work:

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

I believe you should call as value SLOT(rrValuesHolder(int))

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

EDIT: Blood included one additional piece of information that I neglected, Signals and Slots should be connected without variable names!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM