Работа с QMenu и передача аргументов

у меня есть 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);
}

Может кто-нибудь сказать мне, где я не так с этим, пожалуйста?

2

Решение

Кажется, ты должен двигаться connect до exec():

connect(Context_Menu, SIGNAL(triggered(QAction *)),
this, SLOT(SPlusCommand(QAction *)));
Context_Menu->exec(QCursor::pos());

Так как exec выполняет меню синхронно, что означает, что он вернется из этого метода только после завершения всего вашего взаимодействия с меню — слишком поздно, чтобы что-то подключить после него.

4

Другие решения

Вы должны будете связать отдельные действия со своим слотом.

connect(action, SIGNAL(triggered()), this, SLOT(yourSlot())
-2

По вопросам рекламы [email protected]