Jak przekazać QString do gniazda Qt z QMenu przez QSignalMapper lub w inny sposób

Mam QMenu z wieloma podmenu. Są one tworzone dynamicznie, tzn. Menu nazw pochodzą z bazy danych i są tworzone w pętli. Teraz chciałem uruchomić to samo gniazdo, które zostało wyzwolone () lub podobne, gdy kliknięto menu, ale potrzebowałem nazwy menu QString, aby przekazać ją do slotu, abym mógł wykonać określone akcje menu. próbowałemto tj. przekazanie QAction * do wyzwolonego zdarzenia i użycie setData, ale otrzymuję błąd czasu wykonywania.

object :: connect: Brak takiego sygnału QAction :: triggered (QAction *)

for(int j=0; j<channelTypes[i].getNumChannels() ; j++){
        QAction *subMenuAct = subMenu->addAction(tr(c_name)); // c_name the menu name
        subMenuAct->setData(ch_name);
        connect(subMenuAct, SIGNAL(triggered(QAction *)), this, SLOT(playChannel(QAction *))); // playChannel is the slot
}

void <ClassName>::playChannel(QAction *channelAction)
{
     QString str = channelAction->data().toString();
    qDebug() << "Selected - " << str;
}

Alternatywnie próbowałem również QSignalMapper, gdzie signalMapper jest elementem danych zainicjowanym w konstruktorze

signalMapper = new QSignalMapper(this);

i

for(int j=0; j<channelTypes[i].getNumChannels() ; j++){
       QAction *subMenuAct = subMenu->addAction(tr(c_name));

       connect(subMenuAct, SIGNAL(triggered()), signalMapper, SLOT(map()));
       signalMapper->setMapping(subMenu, ch_name);
       connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(playChannel(QString)));
}

W drugim przypadku nie otrzymuję żadnego błędu, jednak funkcja gniazda playChannel nie jest wywoływana. Byłoby naprawdę wdzięczne, gdyby ktoś mógł pomóc w rozwiązaniu tego problemu.

Aktualizacja 1: Jedyną różnicą, jaką widzę z innych przykładów, które widziałem, jest to, że zazwyczaj ludzie sąłączenie sygnałów z kilku widżetów do jednego gniazda (powiedz różne przyciski). W moim przypadku łączę siękilka podmenu (o różnych nazwach) do jednego gniazda. Czy to powinno mieć jakieś znaczenie?

Aktualizacja 2: Zadziałało po korekcie zaproponowanej w rozwiązaniuponiżej dla QSignalMapper. Również fakt, że używałem SubMenu jako argumentu do setMapping, gdzie jako element MenuAction powinien zostać użyty. Ale teraz dostaję zdarzenie wyzwalane wielokrotnie, tj. Tyle razy, ile wpisów w menu głównym dla wybranej kategorii podmenu. Jeśli typ kanału to angielski (menu główne) z czterema wpisami), HBO, filmy gwiazdowe itp. (Podmenu), a wybieram HBO, to zdarzenie jest uruchamiane czterokrotnie ciągiem HBO. Działa dobrze, jeśli utworzę osobny program odwzorowujący sygnał dla każdego podmenu. Ale miałem nadzieję, że powinien zostać użyty pojedynczy mapper i robię tu coś niepoprawnego. Więcej szczegółów w komentarzach do odpowiedzi.

questionAnswers(1)

yourAnswerToTheQuestion