#include #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include "qdom.h" #include #include #include #include #include #include #include MainWindow::MainWindow() { QWidget *widget = new QWidget; widget->setAttribute(Qt::WA_Hover,true); setCentralWidget(widget); createActions(); setWindowTitle(tr("Menus")); setMinimumSize(160, 160); resize(480, 320); } void MainWindow::enterEvent(QEvent *event) { //creationMenus(MenuP,0); } //action de lancement d'applications void MainWindow::Launch(QString prog) { QString cmd = "cmd"; QStringList args; args << "/c"<< "start"<> menu; Menus.append(menu); //on compte le nombre de menus Principaux //on appelle l'action parcours avec pour argument notre fichier xml et le QDomElement "menuPrincipal" parcours(name,doc); i++; rootchild=rootchild.nextSibling().toElement(); } } //fonction qui va permettre l'affichage des menus (gain de place). void MainWindow::parcours(QString nom, QDomDocument docu) { QFile file("text.txt"); file.open(QIODevice::WriteOnly); QTextStream ts(&file); //racine du fichier XML QDomElement root=docu.documentElement(); //Recherche qui va nous permettre de nous positionner sur l'élément XML qui a le nom du paramètre nom de l'action while(root.tagName()!=nom) { //normalement cette recherche sers pour trouver les sous menus //on traverse l'élément pour aller au fils //si ce fils n'a pas de fils (ce n'est pas un menu ni un élément), on passe au premier frère if (root.firstChild().toElement().isNull() || root.tagName()=="element") { root=root.nextSibling().toElement(); } //si on est sur un element, on passe directement au frère (afin de ne pas aller tester ses fils : nom et path) else {root=root.firstChild().toElement();} //a ce stade, root correspond à l'élément recherché } QDomElement child= root.firstChild().toElement(); //compteur de nombre d'éléments et de sous menus du menu Global QList Smenu; Menus[0].append(Smenu); QSignalMapper *signalMapper = new QSignalMapper(this); connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(Launch(const QString &))); //on parcours maintenant ce qui doit être un menu while(!child.isNull()) { ts<setMapping(act, path); } } k++; } //si on est sur un sous menu, on appelle la fontion parcours qui devrait le parcourir else if (child.tagName() == "SousMenu") { j++; k=0; parcours(child.tagName(),docu); } //on, passe au frerz suivant child = child.nextSibling().toElement(); } file.close(); } //void MainWindow::creationMenus(QMenu *menu, int x) // { // //parcours du tableau d'actions // for(int j=x;jiconText()=="menu") // { // //création d'un menu fils au menu courrant et recursion sur ce menu // QMenu *menubis= menu->addMenu(" "); // x=j; // creationMenus(menubis,x); // // } // //si c'est un élément du menu courrant, on l'ajoute à ce menu // else // { // menu->addAction(list[j]); // } // } // // MenuP->exec(QCursor::pos()); //} //