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