i have qlineedit
s , qcheckbox
es qvector
s - have qpushbutton
qvector
when element pressed, corresponding qlineedit
, qcheckbox
removed.
how can find out button pressed determine index remove? using checkbox
es right easy little bulky liking.
thanks!
the straightforward way use qobject::sender()
in button press slot find out button emitted signal. should iterate on vector of buttons:
qobject* obj = sender(); for(int i=0;i<buttonvector.count();i++) { if( obj == qobject_cast<qobject *>(buttonvector[i])) { ... } }
one workaround use qobject::setobjectname
, set names buttons add :
button.setobjectname(qstring("%1").arg(i));
and in slot can retrieve button number using object name :
void mainwindow::buttonclicked() { qpushbutton *button = qobject_cast<qpushbutton *>(qobject::sender()); int number = button->objectname().toint(); }
another way use qsignalmapper
class collects set of parameterless signals, , re-emits them integer, string or widget parameters corresponding object sent signal. can have 1 like:
qsignalmapper * mapper = new qsignalmapper(this); qobject::connect(mapper,signal(mapped(int)),this,slot(buttonclicked(int)));
when newing buttons, can connect clicked()
signal of button map()
slot of qsignalmapper
, add mapping using setmapping
when clicked()
signaled button, signal mapped(int)
emitted:
button = new qpushbutton(); qobject::connect(button, signal(clicked()),mapper,slot(map())); mapper->setmapping(button, i);
this way whenever click button, mapped(int)
signal of mapper emitted containing button number , consequently buttonclicked
called parameter containing button number.
Comments
Post a Comment