Нет таких слотов / сигналов (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;

}

и подключиться (…… this, SLOT (rrValuesHolder (int aValue, int bValue, int cValue))); или нужно написать только одно значение SLOT (rrValuesHolder (int aValue))?

0

Решение

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

Второе: вы не можете связать сигнал с одним аргументом со слотом с тремя аргументами. СИГНАЛ не должен иметь меньше аргументов, чем СЛОТ.

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

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

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

3

Другие решения

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

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

0

По вопросам рекламы [email protected]