begin process at 2012 05 30 12:40:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

GUI

 > 

wxListCtrl->Problème de mise à jour pendant l'exécution->Fermeture du programme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

wxListCtrl->Problème de mise à jour pendant l'exécution->Fermeture du programme

samedi 3 mai 2008 à 11:26:49 | wxListCtrl->Problème de mise à jour pendant l'exécution->Fermeture du programme

isohelix

Bonjour à tous. Je sais ce que vous allez me dire: "la question à déjà été posée". Et j'ai regardé ce qui se rapprochait de près ou de loin à mon problème mais sans succès: je retape ce que font les autres mais ça ne fonctionne toujours pas. Donc j'expose mon problème. J'ai fait un wxListCtrl qui doit me permettre d'afficher les éléments contenus dans un fichier. Lorsque je le créé au lancement du programme pas de souci. Par contre si je lui demande de tout supprimé en faisanr "myListCtrl->ClearAll();" j'ai droit à un joli "Process aborted. Segmentation fault.". Si quelqu'un pouvait m'aider merci.

Voici le code cpp:

#include <wx/wx.h>
#include "opento.h"
#include "wx/aboutdlg.h"
#include "parser.h"

BEGIN_EVENT_TABLE( opentoFrame, wxFrame )
    EVT_MENU( Menu_File_Quitter, opentoFrame::OnQuit )
    EVT_MENU( Menu_Aide_Apropos, opentoFrame::OnAbout )
    EVT_MENU( Menu_Aide_Fullscreen, opentoFrame::OnFullscreen )
    EVT_MENU( Menu_Import_GDM, opentoFrame::OnImportGDM)   
END_EVENT_TABLE()

IMPLEMENT_APP(opentoapp)
   

wxString wsAppName = wxT("eden++");//albatros
wxString wsAppVers = wxT("in dev.");
wxString iFileName;

wxArrayString iFileContent;

bool
opentoapp::OnInit()
{
    opentoFrame *frame = new opentoFrame( wsAppName, wxPoint(50,50), wxSize(450,340) );

    frame->Show(TRUE);
    SetTopWindow(frame);
    return TRUE;
}

opentoFrame::opentoFrame( const wxString& title, const wxPoint& pos, const wxSize& size )
    : wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
    //Création des éléments du menu
    wxMenu *menuFile = new wxMenu;

    menuFile->Append( Menu_File_Nouveau, wxT( "&Nouveau \tCtrl+N" ) );   
    menuFile->Append( Menu_File_Ouvrir, wxT( "&Ouvrir... \tCtrl+O" ) );
    menuFile->AppendSeparator();
    menuFile->Append( Menu_File_Enregistrer, wxT( "&Enregitrer... \tCtrl+E" ) );
    menuFile->Append( Menu_File_EnregistrerSous, wxT( "E&nregitrer sous..." ) );
    menuFile->AppendSeparator();
    menuFile->Append( Menu_File_Fermer, wxT( "&Fermer \tCtrl+F" ) );
    menuFile->AppendSeparator();
    menuFile->Append( Menu_File_Quitter, wxT( "&Quitter \tCtrl+Q" ) );

    wxMenu *menuImport = new wxMenu;

    menuImport->Append( Menu_Import_Leica, wxT( "Carnet Leica/Wild" ) );
    menuImport->Append( Menu_Import_Nikon, wxT( "Carnet Nikon" ) );
    menuImport->Append( Menu_Import_Sokkia, wxT( "Carnet Sokkia" ) );
    menuImport->Append( Menu_Import_Topcon, wxT( "Carnet Topcon" ) );
    menuImport->Append( Menu_Import_GDM, wxT( "Carnet Trimble GDM" ) );

    wxMenu *menuAide = new wxMenu;

    menuAide->Append( Menu_Aide_Fullscreen, wxT( "Plein écran \tF11" ) );
    menuAide->AppendSeparator();   
    menuAide->Append( Menu_Aide_Apropos, wxT( "A &propos..." ) );

    wxMenu *menuCalcul = new wxMenu;

    menuCalcul->Append( Menu_Calcul_Polygonale, wxT( "Calcul d'une polygonale \tF1" ) );
    menuCalcul->AppendSeparator();   
    menuCalcul->Append( Menu_Calcul_Intersection, wxT( "Intersection \tF2" ) );
    menuCalcul->Append( Menu_Calcul_Relevement, wxT( "Relèvement \tF3" ) );
   
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, wxT( "&Fichier" ) );
    menuBar->Append( menuImport, wxT( "&Import carnet" ) );
    menuBar->Append( menuCalcul, wxT( "&Calcul" ) );
    menuBar->Append( menuAide, wxT( "&Aide" ) );
   
    SetMenuBar( menuBar );
   
    CreateStatusBar();
    SetStatusText( wxT( "Bienvenue dans " ) + wsAppName + wxT("!"));

    this->bFullscreen = false;
    this->iFirstSizing = 0;

    wxBoxSizer *mySizer = new wxBoxSizer( wxVERTICAL );

    wxListCtrl *myListCtrl = new wxListCtrl(this, ID_WXLISTCTRL1, wxPoint(0,0), wxSize(this->GetSize().x+360, this->GetSize().y), wxLC_REPORT|wxSUNKEN_BORDER, wxDefaultValidator, wxT("wxListCtrlNameStr") );

    myListCtrl->InsertColumn( 0, _("Ligne"), wxLIST_FORMAT_RIGHT, -1);
    myListCtrl->InsertColumn( 1, _("Eléments"), wxLIST_FORMAT_LEFT, 100);
    myListCtrl->InsertColumn( 2, _("Matricule"), wxLIST_FORMAT_LEFT, -1);
    myListCtrl->InsertColumn( 3, _("Paramètres"), wxLIST_FORMAT_LEFT, 500);
    myListCtrl->InsertColumn( 4, _("Symbole"), wxLIST_FORMAT_LEFT, -1);
    myListCtrl->InsertItem(1,wxT("000001"),0);
    myListCtrl->SetItem(0,1,wxT("COMMENTAIRE"));

    mySizer->Add(myListCtrl, wxALL|wxEXPAND);
    mySizer->SetSizeHints(this);
    SetSizer(mySizer);


//SetSizeHints(wxWindow* window


}

void
opentoFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) )
{
    Close(TRUE);
}

void
opentoFrame::OnAbout( wxCommandEvent& WXUNUSED( event ) )
{
    /*wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
            wxT( "About Hello World" ), wxOK | wxICON_INFORMATION, this );*/

    wxAboutDialogInfo info;
    info.SetName( wsAppName );
    info.SetVersion( wsAppVers );
    info.SetDescription(wsAppName + wxT(" est un logiciel de calcul topographique open source.\n\n"));
    info.AddDeveloper( wxT("Arno Rubicceni <arno.rubicceni@fakemail.it>") );
    info.SetCopyright( wxT("Copyrights: Arno Rubicceni, Almost Perfect Developments and\nThe OpenValley Computing Company, April 2008.\nAll rights reserved.\n\nAll sources can be found at") );
    info.SetWebSite(wxT("http://askorn.free.fr/opento"));
    wxAboutBox( info );
}

void
opentoFrame::OnFullscreen( wxCommandEvent& WXUNUSED( event ) )
{
    this->bFullscreen = !this->bFullscreen;
    this->ShowFullScreen(this->bFullscreen, 0);
}

void
opentoFrame::OnImportGDM( wxCommandEvent& WXUNUSED( event ) )
{
    iFileName = wxFileSelector(    wxT("Choisissez un carnet de terrain Trimble Geodimeter"),
                    wxT(""),
                    wxT(""),
                    wxT(""),
                    wxT("Fichier Trimble GDM Job (*.raw)|*.raw"),
                    wxOPEN|wxFILE_MUST_EXIST,
                    NULL,
                    -1,
                    -1);

    if( iFileName != wxT("") )
    {
        //iFileContent = ParseGDMFile( iFileName );
        ParseGDMFile( iFileName );
    }

}

void opentoFrame::ParseGDMFile( wxString wsIn )
{   


    DelimitedFileParser fileParser( wsIn.mb_str(wxConvUTF8), "=" );

        /*On analyse le fichier*/
        fileParser.Parse();

    /*Nombre de lignes*/
        uint uiLignes = fileParser.NumRows();

        /*On obtient le nombre de colonnes*/
        DelimitedRow row = fileParser.getRow(0);
        uint uiColonnes = row.NumColumns();

    if( uiColonnes == 2 )
    {
        myListCtrl->ClearAll();
      
    }

}

et voici le header:


#ifndef _OPENTO_H_
#define _OPENTO_H_

/**
 * @short Application Main Window
 * @author the opento committee <one@zenwalk>
 * @version 0.1
 */

class
opentoapp : public wxApp
{
    public:
        virtual bool OnInit();
};

class
opentoFrame : public wxFrame
{
    public:
        opentoFrame( const wxString& title, const wxPoint& pos, const wxSize& size );
        void OnQuit( wxCommandEvent& event );
        void OnAbout( wxCommandEvent& event );
        void OnFullscreen( wxCommandEvent& event );
        void OnImportGDM( wxCommandEvent& event );
        void ParseGDMFile( wxString wsIn );

        bool bFullscreen;
        uint iFirstSizing;
        wxBoxSizer *mySizer;
        wxListCtrl *myListCtrl;

    private:
        DECLARE_EVENT_TABLE();
        wxMenuBar *menuBar;
        wxMenu *menuAide;
};

enum
{
    Menu_Import_Topcon = 1017,
    Menu_Import_Nikon = 1016,
    Menu_Import_Sokkia = 1015,
    Menu_File_Nouveau = 1014,
    Menu_Calcul_Polygonale = 1013,
    Menu_Calcul_Intersection = 1012,
    Menu_Calcul_Relevement = 1011,
    ID_WXLISTCTRL1 = 1010,
    //ID_WXSTATICBOX1 = 1009,
    Menu_Aide_Fullscreen = 1008,
    Menu_Aide_Apropos = 1007,
    Menu_Import_Leica = 1006,   
    Menu_Import_GDM = 1005,
    Menu_File_Quitter = 1004,
    Menu_File_Fermer = 1003,
    Menu_File_EnregistrerSous = 1002,
    Menu_File_Enregistrer = 1001,
    Menu_File_Ouvrir = 1000
};

#endif // _OPENTO_H_

Je programme sous linux avec KDevelop et wxGTK.
samedi 3 mai 2008 à 12:24:07 | Re : wxListCtrl->Problème de mise à jour pendant l'exécution->Fermeture du programme

luhtor

Avec ce genre d'abérration, c'est normal que ca va pas marcher:

    wxBoxSizer *mySizer = new wxBoxSizer( wxVERTICAL );

    wxListCtrl *myListCtrl = new wxListCtrl(this, ID_WXLISTCTRL1, wxPoint(0,0),

Avec 90% de la réponse à ton pb, tu ne devrais plus avoir de pb pour comprendre pourquoi ca ne marche pas. Encore une fois, un débuggeur t'aurais permis de comprendre le pb "seul".

Conclusion, attention aux étourderies ... et un débuggeur, c'est fait pour etre utiliser.
Et derniere conclusion, TOUJOURS initialiser les pointeurs à NULL. A défaut d'utiliser le debuggeur, tu aurais eu un message un peu plus parlant.

opentoFrame::opentoFrame( const wxString& title, const wxPoint& pos, const wxSize& size )
    : wxFrame((wxFrame *)NULL, -1, title, pos, size),
        bFullscreen(false),
        iFirstSizing(0),
        mySizer(NULL),
        myListCtrl(NULL),
        menuBar(NULL),
        menuAide(NULL)

{


Cette discussion est classée dans : menu, file, append, wxt, opentoframe


Répondre à ce message

Sujets en rapport avec ce message

MFC, VC++6, MENU [ par safira ] safiraje dois créer ce menu par exemple:file edit open find exitj'écris:AppendMenu(menu2, MF_STRING, 1, "File");AppendMenu(menu2, MF_STRIN MFC, VC++ 6, MENU [ par safira ] safiraSalut!J'ai un probleme, je dois créer um menu, comme celui-ci:File Edit Open Find Exitmais en utilisant que les fonctions. Je wxSizer --> modifier la taille et empécher le chevauchement [ par satellite34 ] Bonsoir,Je travaille sur un dev qui contient plusieurs controles (3) dans une fenetre;Il y a 2 sizers, et je voudrait que ces sizers redimmentionnent  Récupération des octets d'un flux MPEG [ par dayvid75014 ] Bonjour à tous,J'aimerais demander à l'utilisateur de rentrer dans la console le chemin d'un fichier vidéo et après je voudrais récupérer ce flux MPEG charger le contenu d'un QtextEdit dans un fichier [ par naddoush ] salut tout le monde, dans mon application j'ai un QtextEdit et un bouton save à coté.je voudrais bien qu'on ecrivant quelques lignes dans ce Qtextedit Editeur Hexadecimal [ par dayvid75014 ] Bonjour à tous,Vous voyez à quoi ressemble un éditeur héxadécimal? un logicilel qui vous affiche les octets contenu dans le fichier ; par exmple, j'ai nom d'un fichier,urgentttt [ par naddoush ] salut tous, dans mon interface graphique j'ai un qlinedit et un bouton ouvrir à coté je veux qu'on ouvrant un fichier, seulement le nom de celui ci s' Sélection d'octet [ par dayvid75014 ] Bonjour à tous, Je récupère les octets de mon fichier vidéo dans un buffer "Buffer[]" et je voudrais sélectionner les octets 0x47 et je n'y a Erreur : Access violation [ par dayvid75014 ] Bonjour à tous,Je fais ceci : FILE *ip_file;seek(ip_file, synchro_bytes[1], 0);  //synchro_bytes stocke mon 1er octet de synchro, je me positionne des RTP raw file [ par dodii ] Bonjour tout le monde,Pour mon projet de fin d'etude je suis entrain de preparer un sniffer en voip (il capture les communication VOIP sur le LAN et l


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales