Projet

Général

Profil

menudynamique.txt

Le code en entier - Jean-Louis Frucot, 16/01/2011 20:03

Télécharger (2,03 ko)

 
1
void MainWindow::creeMenuExo(QString repertoire, QMenu * menuCourant)
2
{
3
    //On crée un signalMapper qui établira le lien entre l'entrée de menu sélectionnée et le fichier à charger
4
    QSignalMapper *signalMapper = new QSignalMapper(this);
5
    connect(signalMapper, SIGNAL(mapped(QString)),this, SLOT(slotLanceExo(QString)));
6

    
7
    //On se positionne dans le répertoire des exercices
8
    QDir dir;
9
    dir.cd(repertoire);
10
    dir.setFilter(QDir::AllEntries | QDir::AllDirs | QDir::NoSymLinks | QDir::NoDotAndDotDot);
11
    dir.setSorting(QDir::DirsLast);
12
    //On crée un filtre pour ne conserver que les fichiers .ini
13
    QStringList filters;
14
    filters << "*.ini";
15
    dir.setNameFilters(filters);
16

    
17
    QFileInfoList list = dir.entryInfoList();
18
    for (int i = 0; i < list.size(); ++i) {
19
        QFileInfo fileInfo = list.at(i);
20

    
21
        if (fileInfo.isDir()) //Condition de sortie de la boucle de récursivité
22
        {
23
            //créer un sousmenu
24
            QMenu *  menucree=new QMenu(fileInfo.fileName(),this);
25
            menu=menuCourant->addMenu(menucree);
26
            MainWindow::creeMenuExo(fileInfo.filePath(),menucree);  //appel récursif
27
        }
28
        else
29
        {
30
            //créer un item de menu
31
            // Les lignes qui suivent sont adaptées à la façon de stocker les paramètres de calculette
32
            // On peut sinon utiliser :
33
            // QString nomItem = fileinfo.fileName();
34
            // qui affichera le nom du fichier débarassé de son path
35
            QSettings parametres(fileInfo.filePath(),QSettings::IniFormat); //On récupère le nom de la calculette
36
            QString nomItem = parametres.value("nom").toString();           //qui est caché dans le .ini
37
            QAction *act=menuCourant->addAction(nomItem);                   //et on l'affecte à l'item de menu
38
            // Reste à définir les actions elles-mêmes et à les connecter !!!
39
            signalMapper->setMapping(act,fileInfo.filePath());
40
            connect(act, SIGNAL(triggered()), signalMapper, SLOT(map()));
41

    
42
        }
43
    }
44
}
Redmine Appliance - Powered by TurnKey Linux