Qt: сигнал динамического виджета и соединение слотов

В моем приложении Qt я динамически создаю некоторые из своих виджетов. Среди них есть QToolButtons, которые должны иметь похожее поведение.

Вот как создаются виджеты:

QMap<QString, QToolButton*> unselectButtonMap;
foreach(QString instance, ...) {
  unselectButtonMap[instance] = new QToolButton;
  myLayout->addWidget(unselectButtonMap[instance]);
  QObject::connect(unselectButtonMap[instance],SIGNAL(clicked()),this,SLOT(unselectInstance()));
}

Теперь я хотел быunselectInstence слот, чтобы узнать, какой экземпляр касается.

Сначала я хотел бы дать имя экземпляра в качестве параметра для слота, но слоты принимают параметры только из сигналов. Идея была что-то вроде:

QObject::connect(unselectButtonMap[instance],SIGNAL(clicked()),this,SLOT(unselectInstance(instance)));

Любая другая идея о том, как это сделать?

Примечания: я использую Qt4.8

EDIT: основанный наshanответ, и потому что мне нужно имя экземпляра вместо самого QToolButton, вот что я пришел к

void MyWindow::unselectInstance() {
  foreach(QString instance, unselectButtonMap.keys()) {
    if(unselectButtonMap[instance] == QObject::sender()) {
      //do stuff here...
    }
  }
}

Сравнение указателей, кажется, работает довольно хорошо.

RE-EDIT: и на основеuser1313312Ответ, мы объявили бы QSignalMapper:

QSignalMapper *signalMapper = new QSignalMapper(this);
QObject::connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(unselectInstance(QString)));

затем подключите QToolButton к мапперу

signalMapper->setMapping(unselectButtonMap[instance], instance);
QObject::connect(unselectButtonMap[instance],SIGNAL(clicked()),signalMapper,SLOT(map()));

и слот будет намного проще:

void MyWindow::unselectinstance(QString instance) {
  //do stuff here...
}

Ответы на вопрос(2)

Ваш ответ на вопрос