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

wxWidgets Discussion :

erreur de type GTK-wxwidget


Sujet :

wxWidgets

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut erreur de type GTK-wxwidget
    Voilà,
    Lors de la compilation du projet sur leque je travaille , j'ai des erreurs sans conséquences ( warning ) du type :
    Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -5 and height 17

    Je ne sais pas d'où ça vient, sans doute d'une librairie qui me manque...
    Merci pour votre aide

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,

    Quelque part dans ton code la fonction gtk_widget_size_allocate() est appelée avec un paramètre de taille -5. Ce qui ne veut rien dire dans le cas d'une grandeur.

  3. #3
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut re
    re,
    je fait nulle part l'appel à cette fonction...en debuggant, ces erreur apparraissent quans je fait l'appel de :
    frame->show();

    ( j'ai une méthode OnInit ou je définit un contructeur de type wxFrame et une méthode MyFrame dérivée de wxFrame)

  4. #4
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Je ne trouve pas dans les sources de wxWidgets la fonction gtk_widget_size_allocate(). Il semblerait que ton problème soit plus lié à GTK qu'à wxWidgets.

    Et si c'est le cas je ne peux pas t'aider... peut être avec ?

  5. #5
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut re
    Je vais vérifier et je te tien au courant si je trouve quelque chose
    merci en tout cas

  6. #6
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63

  7. #7
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Comme c'est indiqué, c'est juste la taille d'un de tes composants qui n'est pas bonne en largeur et hauteur, avec une largeur négative de "-5".

  8. #8
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut re
    mais je n'ai jamais définit un objet avec une taille de -5...En découpant le code, je pense que les erreurs viennent de la partie suivante :
    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
    wxPanel* MyFrame::CreatePanel(int toolId){
     
      wxPanel* Panel = new wxPanel(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL,_("panel"));
     
      // Boite à outils pour le choix des dimensions à représenter
      if(toolId==ID_PalIndice)
      {
     
        wxBoxSizer* s1 = new wxBoxSizer(wxHORIZONTAL);
        m_choice = new wxChoice(Panel,ID_Choice,
                                   wxDefaultPosition, wxDefaultSize,
                                   0, NULL, wxLB_MULTIPLE |wxLB_ALWAYS_SB );
     
     
          s1->Add(1, 1, 1, wxEXPAND);
          s1->Add(new wxStaticText(Panel, wxID_ANY, wxT("Indice :")),0,wxALL,10);
          s1->Add(m_choice,0,wxALL,3);
          s1->Add(1, 1, 1, wxEXPAND);
          s1->SetItemMinSize((size_t)1, 50, 20);
     
          //essai
          wxBoxSizer* s2 = new wxBoxSizer(wxHORIZONTAL);
          m_sliderIdx=new wxSlider(Panel,ID_Slider_ind,0,0,20,wxDefaultPosition,wxSize(120,40),wxSL_HORIZONTAL);
          wxSpinCtrl* SpinCtrl_ind = new wxSpinCtrl(Panel,ID_Spin,
                                    _(""),
                                    wxDefaultPosition, wxSize(40,20),
                                    wxSP_ARROW_KEYS,
                                    0,20,0, _T("wxSpinCtrl"));
     
          s2->Add(1, 1, 1, wxEXPAND);
          s2->Add(new wxStaticText(Panel, wxID_ANY, wxT("Value:")),0,wxALL,10);
          s2->Add(m_sliderIdx,0,wxALL,0);
          s2->Add(SpinCtrl_ind,0,wxALL,10);
          s2->Add(1, 1, 1, wxEXPAND);
          s2->SetItemMinSize((size_t)1, 50, 20);
          //
     
     
     
          wxStaticBoxSizer* cont_sizer = new wxStaticBoxSizer(wxVERTICAL,Panel, _T("Indice"));
          cont_sizer->Add(s1);
          cont_sizer->Add(s2);
          Panel->SetAutoLayout(TRUE);
          Panel->SetSizer(cont_sizer);
          cont_sizer->Fit(Panel);
          GetSizer()->SetSizeHints(Panel);
     
     
      }
     
      // Boîte à outils pour la représentation des points entiers
      if(toolId==ID_PalIntPoint){
             /* wxString choices[] =
          {
            _T("Normal"),
            _T("Picking"),
          };*/
          wxString choices[2];
          choices[0]=_T("Normal");
          choices[1]=_T("Picking");
     
          wxBoxSizer* s1 = new wxBoxSizer(wxHORIZONTAL);
          wxChoice* Choice = new wxChoice(Panel,wxID_ANY,wxDefaultPosition,wxSize(170,30),2,choices,0,wxDefaultValidator,_("choice"));
          Choice->SetColumns(3);
     
          s1->Add(1, 1, 1, wxEXPAND);
          s1->Add(new wxStaticText(Panel, wxID_ANY, wxT("Mode:")),0,wxALIGN_CENTER_HORIZONTAL|wxALL,10); 
          s1->Add(Choice,0,wxALL,0);
          s1->Add(1, 1, 1, wxEXPAND);
          s1->SetItemMinSize((size_t)1, 50, 20);
     
     
          wxBoxSizer* s2 = new wxBoxSizer(wxHORIZONTAL);
          m_slider=new wxSlider(Panel,ID_Slider,0,0,20,wxDefaultPosition,wxSize(120,40),wxSL_HORIZONTAL);
          m_spinCtrl = new wxSpinCtrl(Panel,ID_Spin,
                                    _(""),
                                    wxDefaultPosition, wxSize(40,20),
                                    wxSP_ARROW_KEYS,
                                    0,20,0, _T("wxSpinCtrl"));
     
          s2->Add(1, 1, 1, wxEXPAND);
          s2->Add(new wxStaticText(Panel, wxID_ANY, wxT("Density:")),0,wxALL,10);
          s2->Add(m_slider,0,wxALL,0);
          s2->Add(m_spinCtrl,0,wxALL,10);
          s2->Add(1, 1, 1, wxEXPAND);
          s2->SetItemMinSize((size_t)1, 50, 20);
     
     
     
          wxStaticBoxSizer* cont_sizer = new wxStaticBoxSizer(wxVERTICAL,Panel, _T("Integer Points"));
          cont_sizer->Add(s1, 0, wxGROW|wxALL, 5);
          cont_sizer->Add(s2, 0, wxGROW|wxALL, 5);
          //cont_sizer->Add(new wxCollapsiblePane(Panel, wxID_ANY, wxT("Details:")), 0, wxGROW|wxALL, 5);
     
     
          Panel->SetAutoLayout(TRUE);
          Panel->SetSizer(cont_sizer);
          cont_sizer->Fit(Panel);
          GetSizer()->SetSizeHints(Panel);
     
       }
     
       // Boite à outils pour la statusBar
       if(toolId==1986)	// Ce serait mieux de créer un identifiant
       {
     
        wxBitmap StatusBitmaps[3];
     
        StatusBitmaps[0] = wxBitmap(_("img/red.png"),wxBITMAP_TYPE_PNG);
        StatusBitmaps[1] = wxBitmap(_("img/green.png"),wxBITMAP_TYPE_PNG);
        StatusBitmaps[2] = wxBitmap(_("img/blue.png"),wxBITMAP_TYPE_PNG);
     
        //wxString::FromAscii(tab_idx[idx_cur][0])
     
        wxBoxSizer* StatusBar = new wxBoxSizer(wxHORIZONTAL);
        wxStaticText* Reper = new wxStaticText(Panel, wxID_ANY, wxT("Reper: "));
        id_1 = new wxStaticText(Panel, wxID_ANY, _(""));
        id_1->SetMinSize(wxSize(12,20));
        id_2 = new wxStaticText(Panel, wxID_ANY, _(""));
        id_2->SetMinSize(wxSize(12,20));
        id_3 = new wxStaticText(Panel, wxID_ANY, _(""));
        id_3->SetMinSize(wxSize(12,20));
        Density = new wxStaticText(Panel, wxID_ANY, _("Density : 0"));
        //wxString density = wxString::Format(wxT("Density : %d"), (int)essai::ogl[essai::idx_cur]->dens);
     
        //StText = new wxStaticText(this,wxID_ANY,density);
         //StatusBar->Add(1, 1, 1, wxEXPAND);
     
         StatusBar->Add(Reper,0,wxALL,3);
         StatusBar->Add(new wxStaticBitmap(Panel,wxID_ANY,StatusBitmaps[0],wxDefaultPosition,wxDefaultSize,0,_("staticBitmap1")),0,wxALL,0);
     
         StatusBar->Add(id_1,0,wxALL,3);
     
         StatusBar->Add(new wxStaticBitmap(Panel,wxID_ANY,StatusBitmaps[1],wxDefaultPosition,wxDefaultSize,0,_("staticBitmap2")),0,wxALL,0);
         StatusBar->Add(id_2,0,wxALL,3);
     
         StatusBar->Add(new wxStaticBitmap(Panel,wxID_ANY,StatusBitmaps[2],wxDefaultPosition,wxDefaultSize,0,_("staticBitmap3")),0,wxALL,0);
         StatusBar->Add(id_3,0,wxALL,3);
         //StatusBar->SetItemMinSize((size_t)1, 50, 20);
         StatusBar->AddSpacer(1150);
         StatusBar->Add(Density,0,wxALL,3);
         //StatusBar->Add(StText,0,wxALL,3);
         Panel->SetAutoLayout(TRUE);
         Panel->SetSizer(StatusBar);
         StatusBar->Fit(Panel);
         GetSizer()->SetSizeHints(Panel);
       }
       return Panel;
    }
    J'utilise cette émthode avec aui-manager, de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     m_mgr.AddPane(CreatePanel(ID_PalIntPoint), wxAuiPaneInfo().
                      Name(wxT("settings")).Caption(wxT("Settings")). 
                      Dockable(false).Left().Layer(1).Position(2).Hide());

  9. #9
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Et si tu places un point d'arrêt sur la méthode qui renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -5 and height 17
    Et que tu regardes l'appel, d'où vient l'appel initial ?

  10. #10
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut re
    J'ai testé ça avec ddd, j'ai mis un break point juste avant la mthode OnInit, et les erreurs sont provoqué lors de l'appel de la methode show()...

  11. #11
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Si tu enlèves les 2 appels ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cont_sizer->Fit(Panel);
    GetSizer()->SetSizeHints(Panel);
    Sinon essayer de trouver le composant qui s'initialise mal...
    Soit en regardant ta pile d'appels.
    Soit en vérifiant les Id des composants.
    Soit en commentant ton code pour centrer ta recherche.

  12. #12
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 63
    Par défaut
    Alors, ce matin je pensais que l'erreur était au niveau du setsizer() mais en l'enlevant, mes objets n'étaient pas agencés de la bonne manière.
    En enlevant, la mathode fit() et setsizehint(), ça marche nickel! Merci pour le conseil

    ps : comment je peux vérifier le ld des composants?

    Est-ce que tu comprend bien pourquoi ces methodes étaient reponsables de ces erreurs?

  13. #13
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Inutile dans beaucoup de cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cont_sizer->Fit(Panel);

    Je pense que c'est là dont venait ton problème, tu prend le sizer local alors qu'ensuite il va être réaffecté au "m_mgr", de toute façon cet appel est aussi inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetSizer()->SetSizeHints(Panel);

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

Discussions similaires

  1. [VB]erreur de type
    Par amel95140 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/01/2006, 15h51
  2. Réponses: 1
    Dernier message: 12/12/2005, 04h39
  3. [LG] Erreur de type incompatible dans assignment
    Par Tuxico dans le forum Langage
    Réponses: 4
    Dernier message: 03/12/2005, 22h06
  4. erreur Data type mismatch in criteria expression
    Par bachilbouzouk dans le forum ASP
    Réponses: 3
    Dernier message: 20/04/2005, 12h48
  5. [Agents services] Erreur de types imcompatibles
    Par ApollloCrid dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 14/04/2005, 20h47

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