IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Ajout d'un bouton en fonction d'un fichier .XML


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 6
    Points : 12
    Points
    12
    Par défaut Ajout d'un bouton en fonction d'un fichier .XML
    Bonjour,

    J'ai actuellement 16 Layout statiques déjà définis, layout1, layout2 etc...

    Via un XML je cherche à créer des Widgets dans le layout que je souhaite.

    Exemple : Je veux créer un bouton dans de le layout6 et un toolbox dans de layout9.

    Problème, si je lis les informations de mon .xml il les mes en "string" et je souhaiterais faire un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QPushButton *bouton = new QPushButton;
    PositionLayout = e.attribute("id-layout"); // Ici c'est la valeur de mon xml que je lis, j'ai un élément "id-layout" dans mon xml qui diras dans quel layout je veux créer un bouton. ( la valeur écrite dans le xml est : layout1 ou layout2 etc.....
    ui->PositionLayout->addWidget(bouton); // Normalement sa devrait être : ui->layout1..2..3....->addWidget(bouton) mais je remplace le layout1..2.3 par le "texte" de mon .xml
    Problème sa ne marche pas car il veux directement pointé vers le layout et ne comprend pas le "texte" layout1...2... de mon xml

    Voilà j'espère que j'ai était compréhensible.

    Merci cordialement,

  2. #2
    Membre averti
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    tu pourrais faire quelque chose comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QPushButton *bouton = new QPushButton;
    QString sPositionLayout = e.attribute("id-layout");
     
    if(sPositionLayout.compare("layout1") == 0)
        ui->layout1->addWidget(bouton);
    else if(sPositionLayout.compare("layout2") == 0)
        ui->layout2->addWidget(bouton);
    ...
    C'est sûr c'est un peu lourd... mais là comme ça je ne vois pas trop comment faire autrement! Peut-être que quelqu'un d'autre aura une meilleure solution!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 6
    Points : 12
    Points
    12
    Par défaut
    Bonjour et merci d'avoir répondu,

    J'ai dans mon xml remplacé le id-layout par id-frame. ce n'est qu'un détail mais il fait la même chose, j'ai ici trouvé une solution alternative en me basant sur des ifs,

    le premiers if ( emplacement == ? ) serviras à savoir dans quel layout je vais placer mes widgets et dans le deuxième if ( widget == ? ) je vais savoir quel widget je vais placer car ce que je n'ai pas dit c'est que dans mon XML je déciderais de mettre par exemple au layout1 deux boutons les deux boutons aurons comme "marque" dans mon xml : id-widget="1" si je souhaite avoir 5 boutons mon xml auras : id-widget="2"
    En gros j'aurais des widgets prédéfinis dans mon code QT les if(widget=="?"){} et j'aurais jusqu’à 5 widgets prédéfinis, ( je pourrais en rajouter plus après ) mais je devrais rajouter donc 16 if en plus.

    Le problème 1 est résolu j'arrive donc à placer ce que je veux dans mes différents layout, le souci numéros deux vient des widgets, certes je prédéfinis 5 widgets possibles dans 16 layouts mais j'ai peur que mon code devienne très lourd, car en effet je suis sous un raspberry PI3, si la personne décide mettre l'ensemble widget ( sa feras donc 16 widgets MAX ) quand mon application va démarrer, le temps d’exécution sera très long,

    Je voulais faire appelle à une fonction, par exemple, si le id-widget==1 etc.. il fait appelle à une fonction qui créera ce que j'ai prédéfinis, Problème, c'est au niveau des noms des boutons par exemple si la personnes crée un widget==1 dans le layout1 le boutons aura le nom définis dans la fonction mais si je continue à parcourir mon XML et que là il a aussi décidé de créer un widget==1 dans le layout2, le boutons auras donc le même nom que celui du layout1 ?? Et donc, l’exécution de ce boutons seras bugé.

    J'espère sincèrement avoir été clair car le projet ici, c'est très difficile à expliquer !

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
     
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
     
        QDomDocument dom("mon_xml");
        QFile xml_doc("/home/adrien/asmae/xml_doc.xml");
        if(!xml_doc.open(QIODevice::ReadOnly))
        {
            QMessageBox::warning(this, "Erreur à l'ouverture du document XML", "Le document XML n'a pas pu être ouvert. Vérifiez que le nom est le bon et que le document est bien placé");
            return;
        }
        if (!dom.setContent(&xml_doc))
        {
         xml_doc.close();
         QMessageBox::warning(this, "Erreur à l'ouverture du document XML", "Le document XML n'a pas pu être attribué à l'objet QDomDocument.");
         return;
        }
     
     
        QDomElement dom_element = dom.documentElement();
        QDomNode noeud = dom_element.firstChild();
     
        while(!noeud.isNull())
        {
            QDomElement e = noeud.toElement();
            QString emplacement;
            emplacement=e.attribute("id-frame");
            QString widget;
            widget=e.attribute("id-widget");
     
            if(emplacement=="1"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="2"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="3"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="4"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="5"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="6"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="7"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="8"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="9"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="10"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="11"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="12"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="13"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="14"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="15"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
     
            if(emplacement=="16"){
                if(widget=="1"){
                QMessageBox::information(NULL, "Information", "WIDGET : " + e.attribute("id"));
                }
                if(widget=="2"){
     
                }
                if(widget=="3"){
     
                }
                if(widget=="4"){
     
                }
                if(widget=="5"){
     
                }
            }
            noeud = noeud.nextSibling();
        }
    }
    Je joint aussi mon .xml

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <info>
        <infos id="1"id-frame="1" id-widget="1"></infos>
        <infos id="2" id-frame="7" id-widget="1" ></infos>
        <infos id="3" id-frame="3" id-widget="2" ></infos>
        <infos id="4" id-frame="6" id-widget="1" ></infos>
        <infos id="5"id-frame="8" id-widget="5" ></infos>
        <infos id="6" id-frame="10" id-widget="1" ></infos>
        <infos id="7" id-frame="16" id-widget="4"></infos>
        <infos id="8" id-frame="13" id-widget="4"></infos>
    </info>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 06/11/2017, 18h29
  2. Réponses: 1
    Dernier message: 24/01/2015, 21h39
  3. Réponses: 1
    Dernier message: 01/05/2014, 12h49
  4. [XML] Ajouter un node et ses enfants dans un fichier xml existant
    Par zoreol dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 23/11/2010, 12h50
  5. [xerces 1_0_3] ajout et suppression d'un element d'un fichier xml
    Par noOneIsInnocent dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 17/09/2007, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo