Как получить кнопку вызова от события клика
Я пытаюсь сделать небольшой графический интерфейс для развертывания файлов.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
}
}
Я использовал этот метод для реализации такого случая, потому что код более читабелен, но это может занять много времени, так как происходит сравнение строк. Спасибо!