2013-02-05 5 views
2

У меня есть QMenu, который имеет несколько элементов меню, построенных динамически.Работа с QMenu и передачей аргументов

С этой целью я перебираю элементы меню, содержащие имя и действие (которые нужно было бы предпринять, если элемент меню был удален) и продолжайте добавлять их в контекстное меню. Все пункты меню должны быть подключены к общему разъему.

Но каким-то образом действие триггера не происходит. т. е. достигается оператор соединения, но элемент управления не переходит в указанный SLOT, никаких действий не предпринимается.

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); 
} 

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

ответ

4

Похоже, вы должны двигаться connectперед темexec():

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

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

+0

Большое спасибо. Это сработало. – user1173240

-2

Вам необходимо будет подключить отдельные действия с вашим слотом.

connect(action, SIGNAL(triggered()), this, SLOT(yourSlot()) 
+0

Не совсем верно, потому что он хочет знать, из слота, действие которого было вызвано. Сигнал 'QMenu :: triggered (QAction *)' также является законным, и, как говорится в [documentation] (http://doc.qt.digia.com/stable/qmenu.html#triggered), он сделан по этой причине : при подключении нескольких одинаковых действий к одному слоту. – NIA

 Смежные вопросы

  • Нет связанных вопросов^_^