Как получить кнопку вызова из события clicked

Я пытаюсь сделать небольшой графический интерфейс для развертывания .ухо и. военные файлы на моем местная установка glassfish. Поэтому я сделал пять строк, содержащих поле Имя файла, флажок и кнопка для вызова диалогового окна файла чтобы найти файл war/ear. Было бы неплохо, чтобы все кнопки вызова ту же функцию и из функции сортировка из пяти кнопки, которые сделали вызов (для обновления правильных текстовых полей). Не знайте, если это предполагаемый способ сделать это в объектно-ориентированном путь но мой единственный опыт программирования gui-это какое-то старое событие win16 петли.):

/ / BRG Anders Olme

2 ответов


подключение каждой кнопки click() сигнал с одним и тем же слотом и использовать QObject * QObject::sender () const [protected] в этом слоте, чтобы узнать, какая кнопка отправила сигнал (был нажат). В качестве альтернативы вы можете использовать QSignalMapper который является специальным классом, сделанным только для такого рода задач.


QPushButton *buttonA = new QPushButton("A");
QPushButton *buttonB = new QPushButton("B");
QPushButton *buttonC = new QPushButton("C");

buttonA->setObjectName("A");
buttonB->setObjectName("B");
buttonC->setObjectName("C");

connect(buttonA, SIGNAL(clicked()), this, SLOT(testSlot()));
connect(buttonB, SIGNAL(clicked()), this, SLOT(testSlot()));
connect(buttonC, SIGNAL(clicked()), this, SLOT(testSlot()));

//Now in slot implementation
void QWidget::testSlot()
{
  QObject *senderObj = sender(); // This will give Sender object
  // This will give obejct name for above it will give "A", "B", "C"
  QString senderObjName = senderObj->objectName(); 

  if(senderObjName == "A")
  {
   //Implement Button A Specific 
  }
  //Similarly for "B" and "C"
  if(senderObjName == "B")
  {
   //Implement Button B Specific 
  }
  if(senderObjName == "C")
  {
   //Implement Button C Specific 
  }
}

я использовал этот метод для реализации такого случая, потому что код более читабелен, но может занять много времени при сравнении строк. Спасибо!