Como passar um QString para um slot Qt de um QMenu via QSignalMapper ou de outra forma

Eu tenho um QMenu com muitos submenus. Estes são criados dinamicamente, ou seja, os menus de nomes vêm de um banco de dados e são criados em um loop. Agora eu queria disparar o mesmo slot acionado () ou similar quando um menu é clicado, mas eu precisava do nome do menu QString para ser passado para o slot para que eu pudesse executar ações específicas do menu. eu tenteiisto Ou seja, passando um QAction * para o evento acionado e usado setData, mas estou recebendo o erro de tempo de execução.

object :: connect: Nenhum sinal 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;
}

Como alternativa, eu também tentei QSignalMapper onde signalMapper é um membro de dados inicializado no construtor

signalMapper = new QSignalMapper(this);

e

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

No segundo caso, não recebo nenhum erro, no entanto a função de slot playChannel não está sendo chamada. Realmente apreciaria se alguém pudesse ajudar a resolvê-lo.

Atualização 1: A única diferença que eu vejo de outros exemplos que eu vi é que geralmente as pessoas sãoconectando sinais de vários widgets a um único slot (diga botões diferentes). No meu caso eu estou conectandovários submenus (com nomes diferentes) para um único slot. Isso deve fazer alguma diferença?

Atualização 2: Funcionou após a correção sugerida na soluçãoabaixo para QSignalMapper. Também o fato de que eu estava usando SubMenu como argumento para setMapping, onde o item MenuAction deveria ter sido usado no lugar. Mas agora estou recebendo o evento disparado várias vezes, ou seja, quantas vezes houver entradas no menu principal para a categoria de submenu selecionada. Se o tipo de canal é inglês (menu principal) com quatro entradas), HBO, filmes de estrelas, etc. (submenu), e eu escolho a HBO, então o evento é disparado quatro vezes com a string HBO. Ele funciona bem se eu criar um mapeador de sinal separado para cada submenu. Mas eu estava esperando que um único mapeador deveria ser usado e estou fazendo algo incorretamente aqui. Mais alguns detalhes nos comentários para a resposta.

questionAnswers(1)

yourAnswerToTheQuestion