Ответ 1
У вас есть два варианта:
- Вызовите
sender()
в слот, который вернет действие, вызвавшее сигнал. - Используйте
QSignalMapper
.
В приложении Qt у меня есть куча автоматически созданных QActions (пунктов меню), которые я добавляю в меню в строке меню. Каждый открывает другой файл. Я хотел бы подключить их все к одному слоту, чтобы не писать один и тот же код много раз. Из этого слота, однако, как я могу определить, какой из QActions был вызван?
(Пример: В Cocoa я сделал бы это с параметром отправителя в селекторе действий.)
Спасибо!
У вас есть два варианта:
sender()
в слот, который вернет действие, вызвавшее сигнал.QSignalMapper
.Я бы подключился к сигналу "запущенный" QMenu, а не каждому QAction. Это дает вам QAction, который был нажат как первый параметр.
void MyObject::menuSelection(QAction* action)
{
qDebug() << "Triggered: " << action->text();
}
void MyObject::showMenu(QPoint menuPos)
{
QMenu menu;
menu.addAction( "File A" );
menu.addAction( "File B" );
menu.addAction( "File C" );
connect(&menu, SIGNAL(triggered(QAction*)), this, SLOT(menuSelection(QAction*)));
menu.exec(menuPos);
}
В Qt у вас также есть доступ к отправителю: QObject::sender
.