
Originally Posted by
Radek
Each handler (the "slot" procedure] can call sender() and get a pointer to the object which emitted the just processed signal. sender() returns a QObject * which you dynamic_cast to the real sender class (for example, QSlider). Comparing the pointer to addresses of the possible senders, you get the object which signal is processed. Note: calling sender() outside a handler (for example, in a procedure called by the handler - this is "outside, too) returns nullptr.
Thanks this is what I came up with so far:
In form load:
connect(ui->sliderXaxisMin,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderXaxisMax,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderYaxisMin,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderYaxisMax,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderXaxisMin,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderXaxisMax,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderYaxisMin,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
connect(ui->sliderYaxisMax,SIGNAL(sliderMoved(int)),this,SLOT(on_sliders_sliderMoved(int)));
To copy to clipboard, switch view to plain text mode
and this is the handler:
void frmCustomNetwork::on_sliders_sliderMoved(int position)
{
QSlider * slider
= qobject_cast<QSlider
*>
(sender
());
double value = 0;
double divisor = 0;
if( slider == ui->sliderXaxisMin)
{
value = ui->txtXaxisLower->text().toDouble();
divisor = GetDivisior(value);
ui
->txtXaxisLower
->setText
(QString::number(position
/divisor
));
}
else if ( slider == ui->sliderXaxisMax)
{
value = ui->txtXaxisUpper->text().toDouble();
divisor = GetDivisior(value);
ui
->txtXaxisUpper
->setText
(QString::number(position
/divisor
));
}
else if ( slider == ui->sliderYaxisMin)
{
value = ui->txtYaxisLower->text().toDouble();
divisor = GetDivisior(value);
ui
->txtYaxisLower
->setText
(QString::number(position
/divisor
));
}
else if ( slider == ui->sliderYaxisMax)
{
value = ui->txtYaxisUpper->text().toDouble();
divisor = GetDivisior(value);
ui
->txtYaxisUpper
->setText
(QString::number(position
/divisor
));
}
}
void frmCustomNetwork::on_sliders_sliderMoved(int position)
{
QSlider * slider = qobject_cast<QSlider*>(sender());
double value = 0;
double divisor = 0;
if( slider == ui->sliderXaxisMin)
{
value = ui->txtXaxisLower->text().toDouble();
divisor = GetDivisior(value);
ui->txtXaxisLower->setText(QString::number(position/divisor));
}
else if ( slider == ui->sliderXaxisMax)
{
value = ui->txtXaxisUpper->text().toDouble();
divisor = GetDivisior(value);
ui->txtXaxisUpper->setText(QString::number(position/divisor));
}
else if ( slider == ui->sliderYaxisMin)
{
value = ui->txtYaxisLower->text().toDouble();
divisor = GetDivisior(value);
QMessageBox::information(this,"error",QString::number(divisor));
ui->txtYaxisLower->setText(QString::number(position/divisor));
}
else if ( slider == ui->sliderYaxisMax)
{
value = ui->txtYaxisUpper->text().toDouble();
divisor = GetDivisior(value);
ui->txtYaxisUpper->setText(QString::number(position/divisor));
}
}
To copy to clipboard, switch view to plain text mode
but the catch is when ever I run the application I get this error :
QMetaObject::connectSlotsByName: No matching
signal for on_sliders_sliderMoved
(int)
QMetaObject::connectSlotsByName: No matching signal for on_sliders_sliderMoved(int)
To copy to clipboard, switch view to plain text mode
whats wrong with?!
Bookmarks