Нет таких слотов/сигналов (Qt)

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)) ?


person Deng Won    schedule 11.03.2013    source источник


Ответы (2)


Первое: сигналы и слоты в QObject::connect() должны быть без имен переменных.

Во-вторых: вы не можете соединить сигнал с одним аргументом со СЛОТОМ с тремя аргументами. SIGNAL не должен иметь меньше аргументов, чем SLOT.

Это должно быть, например:

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

И это просто объяснение этому. Если вы испускаете сигнал с одним аргументом (например, для QString), как слот узнает, какие еще два аргумента? Для меня это логично.

person Blood    schedule 11.03.2013
comment
Ok. connect (это, SIGNAL (signal_aValueChange (int, int, int)), это, SLOT (rrValuesHolder (int, int, int))); выдать signal_aValueChange(aValue, bValue, cValue); - person Deng Won; 11.03.2013

«Макрос 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

РЕДАКТИРОВАТЬ: Blood включает в себя одну дополнительную информацию, которой я пренебрег: сигналы и слоты должны быть связаны без имен переменных!

person Alex Hendren    schedule 11.03.2013