Bonjour,

Je suis sous QtCreator 5.4.1, avec windows 7, j'essaye de mettre au point un programme simple qui permet a un utilisateur de classer une image parmi un choix de classes présentes dans une liste de type QComboBox.
Mon problème est que je n'arrive pas à trouver un moyen de retourner la valeur sélectionnée par l'utilisateur après qu'il ait effectué son choix : la fonction currentIndex me retourne toujours 0 avant même que l'utilisateur ait le temps de faire quoi que ce soit. En effectuant des recherches, j'ai pu constater que beaucoup de personnes déconseillent l'utilisation d'une fonction wait() pour attendre que l'utilisateur sélectionne un choix. Du coup je ne vois pas comment faire. J'ai également essayé de faire en sorte que la liste soit dans un objet héritant de QDialog afin que je puisse utiliser l'option setModal(true), mais ça n'a rien changé.

Voici mon main et ma classe FenetreChoix


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
38
39
40
41
42
43
44
 
 
FenetreChoix::FenetreChoix(string chemin, vector<string> nom_defauts) : QDialog()
{
    setModal(true);
 
    setFixedSize(300, 150);
 
    layout = new QVBoxLayout;
 
    layout->setAlignment(Qt::AlignHCenter);
 
    QLabel *image = new QLabel(this);
    image->setPixmap(QPixmap(QString::fromStdString(chemin)));
    layout->addWidget(image);
 
    QLabel *texte = new QLabel("A quelle classe appartient l image?");
 
    layout->addWidget(texte);
 
    liste = new QComboBox(this);
 
    for(unsigned int i =0 ; i< nom_defauts.size() ; i++){
 
        liste->addItem(QString::fromStdString(nom_defauts[i]));
 
    }
 
    layout->addWidget(liste);
 
    QPushButton* confirmer = new QPushButton("Confirmer  ?",this);
 
    QObject::connect(confirmer, SIGNAL(clicked()), qApp, SLOT(quit()));
 
    layout->addWidget(confirmer);
 
    setLayout(layout);
 
    choix = liste->currentIndex();
 
    show();
 
 
}



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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
 
 
int main(int argc, char *argv[])
{
 
    QApplication app(argc, argv);
 
    FenetreInitiale fenetre;
 
    vector< pair<string,string> > ens_appr = fenetre.base_apprentissage_classe();
 
    string chemin_appr_non_classe = fenetre.base_apprentissage_non_classe();
 
    string chemin_test = fenetre.base_test();
 
    for(unsigned int i = 0; i < ens_appr.size() ; i++ ){
 
        cout<<"Classe : "<< ens_appr[i].first <<endl;
        cout<<"Repertoire : "<< ens_appr[i].second <<endl;
        cout<<endl;
 
    }
 
    cout<<"Chemin appr non classe : "<< chemin_appr_non_classe <<endl;
 
    //fenetre.show();
 
    vector<const char*> chemin_apprentissage;
 
    vector<string> nom_defauts;
 
    for(unsigned int i = 0 ; i < ens_appr.size() ; i++){
 
        nom_defauts.push_back(ens_appr[i].first);
 
    }
 
    for(unsigned int i = 0 ; i < ens_appr.size() ; i++){
 
        chemin_apprentissage.push_back(ens_appr[i].second.c_str());
 
    }
 
 
    FenetreChoix fenetre_liste("C:\\data\\test_apprentissage_supervisee\\appr_comet1\\comet000001.bmp",nom_defauts);
 
    cout<<"Classe selectionnee : "<< fenetre_liste.get_choix() <<endl;
 
return app.exec();
 
 
 
 
 
}




Je n'ai pas mis le contenu de ma classe FenetreInitiale qui n'a pas de lien avec ce problème.

Merci pour votre aide.