Я создаю меню динамически. Я добавляю несколько проверяемых действий в одно меню. Иногда действия могут иметь тот же текст, который видит пользователь. Это зависит от пользователя (на самом деле пользователь добавляет команды в меню).
Проблема в том, что щелчок работает неправильно. Если я нажимаю на первое действие (из 2 с одинаковыми текстами), все хорошо, но если я нажимаю на второе, выбираются оба действия. Я не понимаю почему. Код, где были созданы действия, находится здесь:
for (int i = 0; i< currentList.size(); i++)
{
QString lanKey = currentList.at(i)->Language->toString();
QAction* lanAction = new QAction(this);
QString name ="action_" + currentList.at(i)->Id->toString();
lanAction->setObjectName(name);
lanAction->setText(lanKey);
lanAction->setCheckable(true);
lanAction->setData(i);
connect(lanAction, SIGNAL(triggered(bool)), this, SLOT(ShowSomething(bool)));
ui->menuMy->addAction(lanAction);
}
Здесь lanKey
- это язык, который может быть одинаковым для разных действий. В любом случае нажатие на конкретное действие должно привести только к проверке этого действия. Что не так?
Слот здесь:
void VMainWindow::ShowSomething(bool IsTriggered)
{
QAction* senderAction = (QAction*)sender();
int listIndex = senderAction->data().toInt();
if (IsTriggered)
{
CreateEditor(subtitles, listIndex);
}
else
{
//hide this editor
QString name = "editor" + editorsList->Id->toString();
QDockWidget* editorDock = this->findChild<QDockWidget*>(name);
if (editorDock != 0)
{
this->removeDockWidget(editorDock);
this->setLayout(layout());
}
}
}
Спасибо
Источник проблемы найден: оказалось, что слот находит проверенное действие неправильно - по тексту, а не по идентификатору.