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

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

// БРГ Андерс Олме

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 
  }
}

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

Другие вопросы по тегам