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

Discussion :

Créer dynamiquement des QPushButton

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut Créer dynamiquement des QPushButton
    Salut à tous !
    J'ai récemment commencé à créer un démineur (le bon vieux temps), mais je me suis vite retrouvé bloqué à un problème tout simple : la taille de la grille de jeu pouvant changer selon la difficulté, il est selon moi fort mal pensé de créer des centaines de boutons et de les afficher selon la difficulté choisie. Par conséquent, la solution serait de créer ces boutons lors du choix de la difficulté, et de les stocker dans une liste pour pouvoir les gérer facilement. J'ai donc fait le code suivant (j'ai tout codé sans le designer):
    L'entête :
    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
    #ifndef WIN_MAIN_H
    #define WIN_MAIN_H
     
    #include <QMainWindow>
    #include <QPushButton>
    #include <QList>
     
    enum size_e
    {
        PETIT=10, //10x10
        MOYEN=20, //20x20
        GRAND=30  //30x30
    };
     
    class WIN_main : public QMainWindow
    {
        Q_OBJECT
     
    private slots:
        void initialize();
        void generate_game(size_e Size);
    public:
        WIN_main(QWidget *parent = 0);
        ~WIN_main();
    private:
        QPushButton* BUT_restart;
        int const SIZE_BUTTON=20;
        QList<QPushButton> button_grid;
    };
     
    #endif // WIN_MAIN_H
    Le .cpp :
    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
    #include "win_main.h"
     
    WIN_main::WIN_main(QWidget *parent)
        : QMainWindow(parent)
    {
        initialize();
    }
     
    WIN_main::~WIN_main()
    {
     
    }
     
    void WIN_main::initialize()
    {
        this->setFixedSize(300,350);
        BUT_restart=new QPushButton(tr("Restart"),this);
        BUT_restart->setGeometry(10,10,50,20);
        generate_game(MOYEN);
        QPushButton button("",this);
        button.setGeometry(100,100,50,50);
        button.show();
    }
     
    void WIN_main::generate_game(size_e Size)
    {
        int x=10;
        int y=10;
        for(int i=0;i<Size;i++)
        {
            for(int i=0;i<Size;i++)
            {
                QPushButton button("",this);
                button.setGeometry(x,y,SIZE_BUTTON,SIZE_BUTTON);
                button.show();
                button_grid.push_back(button);
                x+=SIZE_BUTTON;
            }
            y+=SIZE_BUTTON;
        }
    }
    Ce code me fait les 105 identiques erreurs suivantes (oui je savais pas comment copier les erreurs alors voilà) :
    Nom : Capture.PNG
Affichages : 315
Taille : 61,1 Ko

    Premièrement les boutons ne s'affichent pas s'ils sont déclarés comme ça (j'en ai déclaré un dans la fonction initialize), et deuxièmement je ne peux pas les mettre dans une QList car on ne peut pas copier un bouton! La solution serait donc de pouvoir créer des attributs privés PENDANT l'exécution du programme!! Et là j'avoue que je sèche
    Delphi 7 et 10.3.2
    IBExpert et Firebird 2.5

    Fervent partisan de la méthode du canard en plastique .

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut
    Bon du coup j'ai trouvé pour ceux que ça intéresse^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QPushButton* cases[10];
    for(int i=0;i<10;i++)
        cases[i]=new QPushButton(ui->...(ou on veut les mettre));
    Delphi 7 et 10.3.2
    IBExpert et Firebird 2.5

    Fervent partisan de la méthode du canard en plastique .

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

Discussions similaires

  1. créer dynamiquement des controles
    Par WELCOMSMAIL dans le forum ASP.NET
    Réponses: 10
    Dernier message: 07/11/2007, 13h02
  2. Réponses: 2
    Dernier message: 25/09/2007, 15h33
  3. Créer dynamiquement des label
    Par flamel dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/08/2007, 14h44
  4. Réponses: 1
    Dernier message: 17/04/2007, 14h43
  5. [D5] Créer dynamiquement des variables dans une fonction
    Par MelkInarian dans le forum Delphi
    Réponses: 11
    Dernier message: 14/04/2007, 12h16

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