Getting two signals inside one slot
-
Hi All,
I'm a bit confused getting two
signals
inside oneslot
void Program::nextBtn() { m_currentBtn++; if(m_currentBtn > btnGrp->buttons().size()) { m_currentBtn = 0; } emit buttonChanged(m_currentBtn); // signal 1 } void Program::changeValue(int value) { CurPoint1->setY(value); CurPoint2->setY(value); update(); emit pulseWidthValue(adjust_PW_range(CurPoint1->y())); // signal 2 }
At present , I do connect:
connect(ui->btn_nextPhase, &QPushButton::clicked, this, &Program::nextBtn); connect(this, &Program::buttonChanged, this, &Program::paintBtn);
to get value of
buttonChanged
signal insidepaintBtn
slot.But now I need value from
pulseWidthValue
signal as well insidepaintBtn
slot..How do I modify the
paintBtn
definition to get both the signal values?Or is there better workaround to this problem?
-
Hi
You can simply add the extra parameter to the signal and slot definitions
and emit it with the new value
emit buttonChanged(m_currentBtn, adjust_PW_range(CurPoint1->y()) );
make sure also change paintBtn so it has this extra paramter. -
@mrjj Hi, thanks a lot for your feedback.
I could not find what's the issue with the following scenario that not works:
Not Working - Run time error: One signal implimentation
void nextBtn(); void paintBtn(int id, int pwvalue); signals: void buttonChanged(int id, int pwvalue); // connections connect(ui->btn_nextPhase, &QPushButton::clicked, this, &Program::nextBtn); connect(this, &Program::buttonChanged, this, &Program::paintBtn); void Program::nextBtn() { m_currentBtn++; if(m_currentBtn > btnGrp->buttons().size()) { m_currentBtn = 0; } emit buttonChanged(m_currentBtn, adjust_PW_range(CurPoint1->y())); } void Program::paintBtn(int id, int pwvalue) { ui->label_7->setText(QString::number(pwvalue)); }
Working scenario: Two signals
void changeValue(int value ); void nextBtn(int pwvalue); void paintBtn(int id, int pwvalue); signals: void buttonChanged(int id, int pwvalue); void pulseWidthValue(int pwvalue); connect(ui->btn_nextPhase, &QPushButton::clicked, this, &ProgramPalmerGrasp::nextBtn); connect(this, &Program::buttonChanged, this, &Program::paintBtn); connect(this, &Program::pulseWidthValue, this, &Program::nextBtn); void Program::changeValue(int value) { CurPoint1->setY(value); CurPoint2->setY(value); update(); emit pulseWidthValue(adjust_PW_range(CurPoint1->y())); } void Program::nextBtn(int pwvalue) { m_currentBtn++; if(m_currentBtn > btnGrp->buttons().size()) { m_currentBtn = 0; } emit buttonChanged(m_currentBtn, pwvalue); } void Program::paintBtn(int id, int pwvalue) { ui->label_7->setText(QString::number(pwvalue)); }
-
@mrjj Hi, thanks a lot for your feedback.
I could not find what's the issue with the following scenario that not works:
Not Working - Run time error: One signal implimentation
void nextBtn(); void paintBtn(int id, int pwvalue); signals: void buttonChanged(int id, int pwvalue); // connections connect(ui->btn_nextPhase, &QPushButton::clicked, this, &Program::nextBtn); connect(this, &Program::buttonChanged, this, &Program::paintBtn); void Program::nextBtn() { m_currentBtn++; if(m_currentBtn > btnGrp->buttons().size()) { m_currentBtn = 0; } emit buttonChanged(m_currentBtn, adjust_PW_range(CurPoint1->y())); } void Program::paintBtn(int id, int pwvalue) { ui->label_7->setText(QString::number(pwvalue)); }
Working scenario: Two signals
void changeValue(int value ); void nextBtn(int pwvalue); void paintBtn(int id, int pwvalue); signals: void buttonChanged(int id, int pwvalue); void pulseWidthValue(int pwvalue); connect(ui->btn_nextPhase, &QPushButton::clicked, this, &ProgramPalmerGrasp::nextBtn); connect(this, &Program::buttonChanged, this, &Program::paintBtn); connect(this, &Program::pulseWidthValue, this, &Program::nextBtn); void Program::changeValue(int value) { CurPoint1->setY(value); CurPoint2->setY(value); update(); emit pulseWidthValue(adjust_PW_range(CurPoint1->y())); } void Program::nextBtn(int pwvalue) { m_currentBtn++; if(m_currentBtn > btnGrp->buttons().size()) { m_currentBtn = 0; } emit buttonChanged(m_currentBtn, pwvalue); } void Program::paintBtn(int id, int pwvalue) { ui->label_7->setText(QString::number(pwvalue)); }
-
Hi
I would guess on that
emit buttonChanged(m_currentBtn, adjust_PW_range(CurPoint1->y()));When you call this, you have not yet ALLOCATED CurPoint1
so it crashes.
Make sure its valid at this point in time.
-
The debug took long time to point at:
emit buttonChanged(m_currentBtn, adjust_PW_range(CurPoint1->y()));
Throws the following message: