Выяснение, какой пункт меню был инициирован в QT

  • Жандарм является открытым исходным кодом, управляет базирующийся статический анализатор (подобный FXCop, но находит много различных проблем).
  • Детектив Клона является хорошим плагином для Visual Studio, которая находит дублирующий код.
  • Также разговор о Моно, я нахожу действие компиляции с Моно компилятором (если Ваш код достаточно независим от платформы, чтобы сделать это, цель, за которую Вы могли бы хотеть бороться так или иначе) находит тонны неиспользуемых переменных и других Предупреждений, что Visual Studio полностью отсутствует (даже с набором уровня предупреждения к 4).
14
задан Geoff 15 October 2009 в 22:31
поделиться

3 ответа

У вас есть две возможности:

  • Вызвать sender () в слоте, который вернет действие, вызвавшее сигнал.
  • Используйте
  • 1245] QSignalMapper .
15
ответ дан 1 December 2019 в 06:39
поделиться

Я бы подключился к 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);
}
19
ответ дан 1 December 2019 в 06:39
поделиться

В Qt у вас также есть доступ к отправителю: QObject :: sender .

10
ответ дан 1 December 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: