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 :

Compilation et variable statique graphique

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Par défaut Compilation et variable statique graphique
    J'ai crée une variable tex de type QtextEdit dans mon projet qui est attachée à ma fenètre principale. Je désire pour pouvoir y avoir accéder depuis une autre classe qui effectue un calcul, la mettre en static. Et alors je pourrai faire dans la methode des calculs une fois ces derniers terminés faire FenPrincipale::tex->append(resultats) pour pouvoir afficher les résultas.

    Seulement à la compilation j'ai cette erreur:" les variables static graphiques ne peuvent pas être initialisées avant le qApplication". Logique mais frustrant.

    Comment faire pour contourner ce problèmes ?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Par défaut
    Pourquoi ne pas accéder à ton widget avec un getter ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Par défaut
    Mais il faudra toujours passer par un FenPrincipale::tex->get() non ?

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Par défaut
    Je poste un bout de code pour clarifier.
    Là je creer mon widget qui contient le text
    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
     void FenPrincipale::createDockWidgetTextEdit()
    {
        CreateDockWidgetDialog dialog(this);
        //int ret = dialog.exec();
        //if (ret == QDialog::Rejected)
          //  return;
     
        QDockWidget *dw = new QDockWidget;
        //dw->setObjectName(dialog.objectName());
        dw->setWindowTitle("Sorties des resultas");
        tex = new QTextEdit;
        QString currentText = Node::debug;
     
        dw->setWidget(tex);
    {
    Mais je désire que ce QtextEdit affiche le text provenant de n'importe quelle autres classe du projet; par exemple :
    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
     
    void Calcul::resultats()
    {
    scene->addItem(new Edge(nodeO,node1));
                  if(tmparete.sens== true)
                      scene->addItem(new Edge(node1,nodeO));
     
                 double RadangleH = (( dblAngleH + g0)* Pi/2 )/100;
     
                 double x = (originePt.getX() + dblDistHoriz *  sin(RadangleH));
     
                 double y = (originePt.getY() + dblDistHoriz *  cos(RadangleH));
     
                 if (Utils::hasCoordinates(tmparete.destination->getNumero()))
                 {
                     query.exec("SELECT x,y FROM caltopoPoint WHERE numeroStation= "+tmparete.destination->getNumero());
                     while(query.next())
                     {
     
                         x= query.value(0).toDouble();
                         y =query.value(1).toDouble();
     
     
                     qDebug () <<"reférence:"<<tmparete.destination->getNumero()<<"x"<< y <<"y: "<<x;
              FenPrincipale::tex->append("reférence: "+mparete.destination->getNumero()+ "x "+y+ "y: "+x;
    }

  5. #5
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Ton widget faisant partie de ton interface, je trouve logique qu'il soit instancié avec elle et pas statique. Si c'est seulement pour accéder à ce widget depuis n'importe quelle classe, je ne pense pas que ça soit la bonne façon de faire. Mais là c'est un débat C++ qui a été entretenu de nombreuses fois.

    Dans ton code tu semble mélanger le calcul et l'affichage, là encore c'est au choix, mais il est souvent préférable de séparer les deux autant que possible. Ce pourrait être une classe principale qui gère les appels aux fonctions métiers (Calcul::resultats) et récupère les QString à afficher, puis les fait passer à la fenêtre principale qui se chargera elle de mettre à jour ton QTextEdit.

    Ca oblige à plus de fonctions intermédiaires, mais dans tout projet amené à grossir et évoluer, ça te facilitera vite les choses pour la suite.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 59
    Par défaut
    Merci pour les conseils, je me doutais biens que ma façon de faire était un peu "sale", mais j'ai pas encore trouvé la motivation de dépasser le chapitre 3 de "think in c++" et ça commence à se voire.

    Ce pourrait être une classe principale qui gère les appels aux fonctions métiers (Calcul::resultats) et récupère les QString à afficher, puis les fait passer à la fenêtre principale qui se chargera elle de mettre à jour ton QTextEdit.
    J'ai pensé à cette eventualité au lieu de trimballer une objet graphique en static, la fonction résultats stocke les infos dans un QString que je passe à la fenêtre, toujours avec la methode QTextEdit::append(). Mais alors il ne se passe rien. De quelle manière le QString doit-il être passé à la fenêtre pour que le QTexteEdit se mettent à jour.? Utiliser les signaux et slots ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2010, 14h22
  2. [Tableaux] Probleme variable statique dans une classe
    Par Joe Le Mort dans le forum Langage
    Réponses: 7
    Dernier message: 31/08/2006, 11h35
  3. Utilisation d'une variable statique
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/06/2006, 13h49
  4. Réponses: 7
    Dernier message: 07/02/2006, 15h04
  5. Exportation de variable statique
    Par Laurent Gomila dans le forum C++
    Réponses: 16
    Dernier message: 31/08/2005, 16h32

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