у меня есть QMenu
который имеет несколько пунктов меню, построенных динамически.
Для этого я перебираю коллекцию пунктов меню, содержащую имя и действие (которые необходимо выполнить при нажатии элемента меню), и продолжаю добавлять их в контекстное меню. Все пункты меню должны быть связаны в общий слот.
Но почему-то триггерного действия не происходит. то есть оператор connect достигнут, но элемент управления не переходит в указанный слот, никаких действий не предпринимается.
for (int i=0; i<Action_List.size();i++)
{
tempAct1 = Action_List.at(i); //Action List has the list of Actions
Context_Menu->addAction(tempAct1);
}
if (Context_Menu!=NULL) {
Context_Menu->exec(QCursor::pos());
int r = connect(Context_Menu, SIGNAL(triggered(QAction *)),
this, SLOT(SPlusCommand(QAction *)));
}
int P14MainWindow::SPlusCommand ( QAction* Action)
{
QVariant tempstr = Action->data();
QString Qs = tempstr.toString();
return QPwLocalClient::ExecuteCommand(Qs);
}
Может кто-нибудь сказать мне, где я не так с этим, пожалуйста?
Кажется, ты должен двигаться connect
до exec()
:
connect(Context_Menu, SIGNAL(triggered(QAction *)),
this, SLOT(SPlusCommand(QAction *)));
Context_Menu->exec(QCursor::pos());
Так как exec
выполняет меню синхронно, что означает, что он вернется из этого метода только после завершения всего вашего взаимодействия с меню — слишком поздно, чтобы что-то подключить после него.
Вы должны будете связать отдельные действия со своим слотом.
connect(action, SIGNAL(triggered()), this, SLOT(yourSlot())