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