Bonjour à tous !

Ne connaissant pas trop QT et ses possibilités, je viens à vous car j'ai un problème pour lequel je n'ai pas encore trouvé de solution.

J'ai créé une barre de menu, tout ce qui a de plus simple avec une liste de sous-menu contenant le nom de certains pays. La liste de ces pays est lue à partir d'un fichier XML.

Pour récupérer l'évènement du clic sur l'un des sous-menus, j'ai connecté cet évènement à un slot appelé "test()". Voici le code qui effectue cette opération :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
FenetrePrincipale::FenetrePrincipale(Collection * pCollection, QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::FenetrePrincipale)
{
    ui->setupUi(this);
    m_pCollection = pCollection;
 
    // Récupération de la liste des pays
    QVector<Pays> vListePays = m_pCollection->GetListePays();
 
    // Récupération du nombre de pays
    long nNbPays = vListePays.size();
 
    // Parcours des pays pour les ajouter dans la barre de menu Pays
    for (int i=0; i<nNbPays; i++)
    {
        // Récupération du pays courant
        Pays pays = vListePays.at(i);
 
        // Récupération de son nom
        QString strNom = pays.GetNom();
 
        // Création d'un sous-menu correspondant au pays
        QAction * pAction = new QAction(this);
        pAction->setObjectName(strNom);
        pAction->setText(strNom);
        ui->menuPays->addAction(pAction);
 
        // Connection du QAction au slot test()
        connect(pAction, SIGNAL(triggered()), this, SLOT(test()));
    }
}
 
void FenetrePrincipale::test()
{
    int test=0;
}
Le problème qui se pose est que je trouve pas comment faire pour savoir sur quel sous-menu, on a cliqué.

Etant donné que je ne peux pas créer "statiquement" autant de slot qu'il y a de pays (vu qu'on ne les connait pas à l'avance), il faudrait que j'arrive à faire passer un paramètre au slot qui me permettra de me dire sur quel sous-menu on a cliqué.

Si quelqu'un a une idée ou une autre solution, je suis preneur !

Merci d'avance !