[QT] vider QGridLayout et rafraichir sont affichage

Résolu
yepraoulette Messages postés 1 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 11 juin 2009 - 11 juin 2009 à 16:55
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011 - 16 juin 2009 à 16:49
Salut a tous,
Je cherche en faite a afficher une partie d'un tableau (stocké dans une QList de QList) dans un GridLayout
L'utilisateur peut choisir le nb de ligne et de colonnes qu'il veut afficher de ces donnée,
Mon programme doit donc effacer le contenu du Grid a chaque fois que l'utilisateur change les dimension
et ensuite afficher le nouveaux Grid.

Mon programme s'execute sans probleme mais lorsque l'on baisse les dimension des cases de l'ancien QGrid s'affiche derriere le nouveau....
Y a til un probleme de rafraichissement ou est-ce que je detrui mal l'ancien QGrid???

Si quelqu'un a un debut de réponse je suis preneur

Voici mon code:

++++++++++++++++++++++++++++++++++++++++++++++++++

// fen.cpp

#include "fen.h"
using namespace std;

FenPrincipale::FenPrincipale()
{
  // fenetre principal
  QVBoxLayout *fenetre_principale = new QVBoxLayout(this);
  setLayout(fenetre_principale);
    setWindowTitle("Projet");
    resize(800, 600);   // a voir

// 1-generer matrice
   nb_col = new QSpinBox;
   nb_col->setValue(2);
   nb_col->setMaximum(20);
   nb_lig = new QSpinBox;
   nb_lig->setValue(2);
   nb_lig->setMaximum(20);
   QFormLayout *nom_col = new QFormLayout;
   QFormLayout *nom_lig = new QFormLayout;
       nom_col->addRow("Nombre de colonne : ",nb_col);
       nom_col->addRow("Nombre de ligne : ",nb_lig);
   m_boutongenMat = new QPushButton("Generer la Matrice");
       connect(m_boutongenMat, SIGNAL(clicked()), this, SLOT(genererMat()));
   QVBoxLayout *nb_lig_col = new QVBoxLayout;
       nb_lig_col->addLayout(nom_col);
       nb_lig_col->addLayout(nom_lig);
       nb_lig_col->addWidget(m_boutongenMat);
  
   QGroupBox *numcollig = new QGroupBox("Generer la matrice");
      numcollig->setLayout(nb_lig_col);

// 2-definition d'un tableau de QList de SpinBox
    for(int i=0;i<10;i++)
    {
        monTableauStab << QList<QDoubleSpinBox *>();
        for(int j=0;j<10;j++)
        {
            monTableauStab[i] << new QDoubleSpinBox(this);
        }
    }
   
    // gridlayout ou seront affiché les elements de la QList
  
      gridstablistLayout = new QGridLayout(this);
   QGroupBox *Boxdugrid = new QGroupBox(this);
       Boxdugrid->setLayout(gridstablistLayout);

  fenetre_principale->addWidget(numcollig);     
  fenetre_principale->addWidget(Boxdugrid);
}
       

void FenPrincipale::genererMat()
{  
    int_nb_lig = nb_lig->value() ;
    int_nb_col = nb_col->value() ;
    cout << int_nb_lig << int_nb_col << "bordel" << endl;
    // on commence par sauvegarder les donnees de la mat

     // on detruit le QGridLayout 
  if (true){   
    QLayoutItem *child;
    while ((child = gridstablistLayout->takeAt(0)) != 0)
        {
        //child->widget()->deleteLater();
        delete child;
        }   
      }

    // on affiche une partie du tableau dans un QGridLayout

    for(int i=0;iaddWidget(monTableauStab[i][j],i,j);
        }
    }
   
   
}

++++++++++++++++++++++++++++++

// fen.h

#ifndef HEADER_FENPRINCIPALE
#define HEADER_FENPRINCIPALE

#include <QtGui>
#include

class FenPrincipale : public QWidget
{
    Q_OBJECT

    public:
        FenPrincipale();

    private slots:
        void genererMat();
       
    private:
        int int_nb_lig;
        int int_nb_col;
        QSpinBox *nb_col;
        QSpinBox *nb_lig;
        QPushButton *m_boutongenMat;
        QList<QList<QDoubleSpinBox *> > monTableauStab;  
        QGridLayout *gridstablistLayout;

};

#endif

+++++++++++++++++++++++++++++++++++++++++++++++++++

//main.cpp

#include <QApplication>
#include "fen.h"

typedef double vect[1000];
using namespace std;

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    FenPrincipale fenetre;
    fenetre.show();

    return app.exec();
    system("pause");

return 0;
}

+++++++++++++

Dsl mais je n'ai pas trouvé comment faire de citation

1 réponse

SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
16 juin 2009 à 16:49
Salut,

Il faut faire attention de ne rien préciser au niveau du nombre de case et de leur dimenssion dan le QtDesigner.
Sinon je n'ai pas pus lu le code que ça, Va voir sur QtFR .

Cordialement,
Sébastien.
-2
Rejoignez-nous