First I will explain you how QSignalMapper
works. Then I will explain you why you don't need it.
How QSignalMapper
works:
Create s QSignalMapper
. Lets assume that you want to assign an integer value to each checkbox, so every time you click on any checkbox, you will get a signal with the integer value assigned to it.
Connect the mapper signal to your SLOT, that you will implement:
connect(mapper, SIGNAL(mapped(int)), this, SLOT(yourSlot(int)));
Now you can write slot, that will take integer argument. The argument will be different for each checkbox you have.
While you create checkboxes, for each checkbox you need to do following:
mapper->setMapping(checkBox, integerValueForThisCheckbox);
connect(checkBox, SIGNAL(clicked()), mapper, SLOT(map()));
From now on, every time you click on a checkbox, it will emit clicked()
signal to the QSignalMapper
, which will then map it to the assigned integer value and will emit mapped()
signal. You connected to that mapped()
signal, so yourSlot(int)
will be called with the proper integer value.
Instead of integers, you can assign QString
, QWidget*
or QObject*
(see Qt documentation).
This is how QSignalMapper
work.
You don't need it:
- The
QTableWidget *monTab
is the single object, it doesn't change. Keep it as a class member field and use it from your slot function.
- The
QCheckBox *pCheckBox
- you can get it by casting sender()
to QCheckBox*
.
Like this:
void supervision::yourSlot()
{
QCheckBox* pCheckBox = qobject_cast<QCheckBox*>(sender());
if (!pCheckBox) // this is just a safety check
return;
}
The sender()
function is from QObject
, which you do inherit from, so you have access to it.
- The
int linge
(it's a line number, right?) - when you create checkboxes, you can store pointers to that checkboxes in QList
class field and use it from your slot function find out which line is it, like this:
In class declaration:
private:
QList<QCheckBox*> checkboxes;
When creating checkboxes:
QCheckBox* cb = new QCheckBox();
checkboxes << cb;
In your slot function:
void supervision::yourSlot()
{
QCheckBox* pCheckBox = qobject_cast<QCheckBox*>(sender());
if (!pCheckBox) // this is just a safety check
return;
int linge = checkboxes.indexOf(pCheckBox);
}
If you want, you can skip that QList
and use QSignalMapper
and assign lines to checkboxes using mapper. That's just a matter of what you prefer.
QSignalMapper
? any particular reason? this can be done easily with direct connection – SoferQSignalMapper
works, here is a good example for you to start with. – CathedralQSignalMapper
step by step in details. You just need to ruminate it and it takes time. I think you are just a little bit too urgent on solving this problem; it has nothing to do with being stupid or not. – Cathedral