#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(); } //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,1); nb_menus_princ++; rootchild=rootchild.nextSibling().toElement(); } } //fonction qui va permettre l'affichage des menus (gain de place). void MainWindow::parcours(QString nom, QDomDocument docu, int compt) { //QFile file("text.txt"); //file.open(QIODevice::WriteOnly); //QTextStream ts(&file); //compteur de sous-menus int x =0; //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 && x Smenu; Menus[nb_menus_princ].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()) { //on tombe sur une zone : juste un affichage des infos if (child.tagName() == "nom") { QString nom =child.text(); } else if (child.tagName() == "zone") { QString zone =child.text(); } else if (child.tagName() == "element") { //on parcours l'élémént QDomElement grandChild=child.firstChild().toElement(); while(!grandChild.isNull()) { //si c'est son nom, on crée une action dont le nom sera le nom du raccourci ( dans le prog futur) if (grandChild.tagName() == "nom") { QString nom=grandChild.text(); Menus[nb_menus_princ][nb_menus].append(new QAction((nom),this)); } grandChild = grandChild.nextSibling().toElement(); //si c'est le path, on associe l'action définie avant avec l'action de lancement de programme (pareil) if (grandChild.tagName() == "path") { QString path=grandChild.text(); QAction *act = Menus[nb_menus_princ][nb_menus][nb_element]; //on utilise un mapper pour transmettre le path à Launch() connect(act,SIGNAL(triggered()),signalMapper,SLOT(map())); signalMapper->setMapping(act, path); } } nb_element++; } //si on est sur un sous menu, on appelle la fontion parcours qui devrait le parcourir else if (child.tagName() == "SousMenu") { //il y a une occurence de sousmenu en plus à éviter lors de la recherche du début de parcours() nb_occ++; nb_menus++; nb_element=0; parcours(child.tagName(),docu,nb_occ); } //on, passe au frere suivant child = child.nextSibling().toElement(); } // file.close(); } void MainWindow::creationMenus() { QMenu Menu(this); for (int nbe =0;nbeaddAction(action); } } Menu.exec(QCursor::pos()); }