2015-02-21 23 views
5

Chcę uruchomić mój slot z parametrem po kliknięciu dynamicznie utworzonej QAction, ale nie mogę dodawać zmiennych podczas tworzenia QAction w QMenu, a domyślny automat triggered() nie może go przekazać.QAction z parametrem niestandardowym

Aby być bardziej jasne, chcę Archiwum coś takiego:

connect(someAction, SIGNAL(triggered(MyClass*)), this, SLOT(execute(MyClass*)); 

Jak mogę otrzymać? Próbowałem utworzyć niestandardową QAction, ale nie wiem, jak dodać ją do QMenu - nie ma funkcji takiej jak addAction(QAction).

+0

Co dokładnie chcesz przekazać? Wygląda na to, że próbujesz przekazać coś w sposób, który nie jest zalecany. Spróbuj znaleźć alternatywne koncepcje, takie jak instancja singleton. –

+0

Prawdopodobnie QActionGroup jest tym, czego potrzebujesz. – Matt

Odpowiedz

7

można zapisać parametr w akcji sam jako QVariant wykorzystaniem QAction::setData() funkcję. Na przykład:

QVariant v = qVariantFromValue((void *) yourClassObjPointer); 
action->setData(v); 

w gnieździe trzeba będzie wyodrębnić wskaźnik jak:

void execute() 
{ 
    QAction *act = qobject_cast<QAction *>(sender()); 
    QVariant v = act->data(); 
    YourClass yourPointer = (YourClass *) v.value<void *>(); 
} 
+0

Dzięki, to jest to, czego potrzebuję - dobra odpowiedź na dobry przykład. – aso

1
  1. Zbierz dynamicznych QAction JEST W jednym QActionGroup użyciu QAction::setActionGroup()

  2. Korzystając QAction::setData() do przechowywania danych niestandardowych w każdym QAction.

  3. connectQActionData Sygnał triggered(QAction*) do niektórych slot.