2013-02-05 2 views
2

동적으로 빌드 된 여러 메뉴 항목이있는 QMenu이 있습니다.QMenu 작업 및 인수 전달

이 목적을 위해 이름과 액션 (메뉴 항목에 도달하면 취할 필요가 있음)을 포함하는 메뉴 항목 컬렉션을 반복하고 컨텍스트 메뉴에 계속 추가합니다. 모든 메뉴 항목은 을 공통 슬롯에 연결해야합니다.

하지만 어떻게 든 트리거 동작이 발생하지 않습니다. 즉, connect 문에 도달했지만 컨트롤이 지정된 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

것 같다 : exec 동 기적으로 메뉴 실행

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

때문에, 무엇은이 메소드로부터 반환된다는 것을 의미하는 경우에만 메뉴가있는 모든 상호 작용 끝났다 - 너무 늦어서 뭔가를 연결했다.

+0

고마워요. 그 말이 맞았습니다. – user1173240

-2

슬롯마다 개별 작업을 연결해야합니다. 당신이exec() 전에 connect이동해야처럼

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

그가 어떤 동작이 호출되었는지를 슬롯에서 알기를 원하기 때문에 좋지 않습니다. 'QMenu :: triggered (QAction *) '신호도 합법적이며, [documentation] (http://doc.qt.digia.com/stable/qmenu.html#triggered)에 나와 있듯이, 그 이유가 바로 이루어집니다 : 여러 개의 * 비슷한 * 동작을 같은 슬롯에 연결할 때. – NIA