wxWidgets GUI Projekt kompilieren



  • Ich habe doch alle Dateien als Downloadlink angehangen. Hier nochmal alle Dateien in Textform:

    //File: main.cpp
    #include "wx/wxprec.h"
    #include "mainframe.h" // supplied by the user
    
    class MyApp : public wxApp
    {
    public:
      bool OnInit();
    };
    
    IMPLEMENT_APP( MyApp )
    
    bool MyApp::OnInit()
    {
            MainFrame *frame = new MainFrame(NULL);
    		frame->Show();
    		return true;
    }
    
    //File: mainframe.h
    #ifndef __mainframe__
    #define __mainframe__
    
    /**
    @file
    Subclass of GUI_MainFrame, which is generated by wxFormBuilder.
    */
    
    #include "gui.h"
    
    //// end generated include
    
    /** Implementing GUI_MainFrame */
    class MainFrame : public GUI_MainFrame
    {
    	protected:
    		// Handlers for GUI_MainFrame events.
    		void OnCalculateClick( wxCommandEvent& event );
    		void OnExitClick( wxCommandEvent& event );
    	public:
    		/** Constructor */
    		MainFrame( wxWindow* parent );
    	//// end generated class members
    
    };
    
    #endif // __mainframe__
    
    //File: mainframe.cpp
    #include "mainframe.h"
    
    MainFrame::MainFrame( wxWindow* parent )
    :
    GUI_MainFrame( parent )
    {
    
    }
    
    void MainFrame::OnCalculateClick( wxCommandEvent& event )
    {
      wxArrayString output;
      wxString      command;
    
      m_tcMD5->Clear();
    
      if(m_fpFile->GetPath().IsEmpty())
        return;
    
      command = wxString(wxT("md5sum ")) + m_fpFile->GetPath();
    
      if(wxExecute(command,output) == 0)
        m_tcMD5->SetValue(output[0].BeforeFirst(wxChar(' ')));
    }
    
    void MainFrame::OnExitClick( wxCommandEvent& event )
    {
      Close();
    }
    
    //File: gui.h
    ///////////////////////////////////////////////////////////////////////////
    // C++ code generated with wxFormBuilder (version Jun 30 2011)
    // http://www.wxformbuilder.org/
    //
    // PLEASE DO "NOT" EDIT THIS FILE!
    ///////////////////////////////////////////////////////////////////////////
    
    #ifndef __GUI_H__
    #define __GUI_H__
    
    #include <wx/artprov.h>
    #include <wx/xrc/xmlres.h>
    #include <wx/string.h>
    #include <wx/stattext.h>
    #include <wx/gdicmn.h>
    #include <wx/font.h>
    #include <wx/colour.h>
    #include <wx/settings.h>
    #include <wx/filepicker.h>
    #include <wx/textctrl.h>
    #include <wx/sizer.h>
    #include <wx/statline.h>
    #include <wx/button.h>
    #include <wx/panel.h>
    #include <wx/frame.h>
    
    ///////////////////////////////////////////////////////////////////////////
    
    ///////////////////////////////////////////////////////////////////////////////
    /// Class GUI_MainFrame
    ///////////////////////////////////////////////////////////////////////////////
    class GUI_MainFrame : public wxFrame 
    {
    	private:
    
    	protected:
    		wxPanel* m_panel1;
    		wxStaticText* m_staticText1;
    		wxFilePickerCtrl* m_fpFile;
    		wxStaticText* m_staticText2;
    		wxTextCtrl* m_tcMD5;
    		wxStaticLine* m_staticline1;
    		wxButton* m_button1;
    		wxButton* m_button2;
    
    		// Virtual event handlers, overide them in your derived class
    		virtual void OnCalculateClick( wxCommandEvent& event ) { event.Skip(); }
    		virtual void OnExitClick( wxCommandEvent& event ) { event.Skip(); }
    
    	public:
    
    		GUI_MainFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("MD5 Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxDEFAULT_FRAME_STYLE|wxTAB_TRAVERSAL );
    
    		~GUI_MainFrame();
    
    };
    
    #endif //__GUI_H__
    
    //File: gui.cpp
    ///////////////////////////////////////////////////////////////////////////
    // C++ code generated with wxFormBuilder (version Jun 30 2011)
    // http://www.wxformbuilder.org/
    //
    // PLEASE DO "NOT" EDIT THIS FILE!
    ///////////////////////////////////////////////////////////////////////////
    
    #include "gui.h"
    
    ///////////////////////////////////////////////////////////////////////////
    
    GUI_MainFrame::GUI_MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style )
    {
    	this->SetSizeHints( wxDefaultSize, wxDefaultSize );
    
    	wxBoxSizer* bSizer1;
    	bSizer1 = new wxBoxSizer( wxVERTICAL );
    
    	m_panel1 = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
    	wxBoxSizer* bSizer3;
    	bSizer3 = new wxBoxSizer( wxVERTICAL );
    
    	wxFlexGridSizer* fgSizer1;
    	fgSizer1 = new wxFlexGridSizer( 0, 2, 0, 0 );
    	fgSizer1->AddGrowableCol( 1 );
    	fgSizer1->SetFlexibleDirection( wxBOTH );
    	fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
    
    	m_staticText1 = new wxStaticText( m_panel1, wxID_ANY, wxT("Select a File:"), wxDefaultPosition, wxDefaultSize, 0 );
    	m_staticText1->Wrap( -1 );
    	fgSizer1->Add( m_staticText1, 0, wxALL|wxALIGN_RIGHT, 5 );
    
    	m_fpFile = new wxFilePickerCtrl( m_panel1, wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.*"), wxDefaultPosition, wxDefaultSize, wxFLP_DEFAULT_STYLE );
    	fgSizer1->Add( m_fpFile, 0, wxALL|wxEXPAND, 5 );
    
    	m_staticText2 = new wxStaticText( m_panel1, wxID_ANY, wxT("MD5:"), wxDefaultPosition, wxDefaultSize, 0 );
    	m_staticText2->Wrap( -1 );
    	fgSizer1->Add( m_staticText2, 0, wxALL|wxALIGN_RIGHT, 5 );
    
    	m_tcMD5 = new wxTextCtrl( m_panel1, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
    	fgSizer1->Add( m_tcMD5, 0, wxALL|wxEXPAND, 5 );
    
    	bSizer3->Add( fgSizer1, 1, wxEXPAND, 5 );
    
    	m_staticline1 = new wxStaticLine( m_panel1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
    	bSizer3->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 );
    
    	wxBoxSizer* bSizer2;
    	bSizer2 = new wxBoxSizer( wxHORIZONTAL );
    
    	m_button1 = new wxButton( m_panel1, wxID_ANY, wxT("&Calculate"), wxDefaultPosition, wxDefaultSize, 0 );
    	bSizer2->Add( m_button1, 0, wxALL, 5 );
    
    	m_button2 = new wxButton( m_panel1, wxID_ANY, wxT("&Exit"), wxDefaultPosition, wxDefaultSize, 0 );
    	bSizer2->Add( m_button2, 0, wxALL, 5 );
    
    	bSizer3->Add( bSizer2, 0, wxALIGN_RIGHT, 5 );
    
    	m_panel1->SetSizer( bSizer3 );
    	m_panel1->Layout();
    	bSizer3->Fit( m_panel1 );
    	bSizer1->Add( m_panel1, 1, wxEXPAND, 5 );
    
    	this->SetSizer( bSizer1 );
    	this->Layout();
    
    	this->Centre( wxBOTH );
    
    	// Connect Events
    	m_button1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUI_MainFrame::OnCalculateClick ), NULL, this );
    	m_button2->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUI_MainFrame::OnExitClick ), NULL, this );
    }
    
    GUI_MainFrame::~GUI_MainFrame()
    {
    	// Disconnect Events
    	m_button1->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUI_MainFrame::OnCalculateClick ), NULL, this );
    	m_button2->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( GUI_MainFrame::OnExitClick ), NULL, this );
    
    }
    

    @kakadu: Nachdem ich

    #include "wx/wxprec.h"
    

    in der main.cpp durch

    #include <wx/wx.h>
    

    ersetzt habe, wird das Programm ohne Fehler kompiliert. Danke für den Tipp. Wenn ich jedoch mit dem Programm eine Datei auswähle und dann auf Calculate klicke, erscheint nur eine Fehlermeldung:

    Execution of command 'md5sum C:\MD5\mainframe.h' failed (error 2: das System kann die angegebene Datei nicht finden.)

    P.S.: Ich habe ja jetzt nur die Dateien aus dem Videotutorial abgeschrieben und deshalb auch keine main.h angelegt. Seltsam das, das Programm im Video funktioniert und bei mir nicht. Korrekt müsste die main.cpp wie folgt aufgeteilt werden, richtig?

    //File: main.h
    #include <wx/wx.h>
    
    class MyApp : public wxApp
    {
    public:
      bool OnInit();
    };
    
    //File: main.cpp
    #include "main.h"
    #include "mainframe.h" // supplied by the user
    
    IMPLEMENT_APP( MyApp )
    
    bool MyApp::OnInit()
    {
            MainFrame *frame = new MainFrame(NULL);
    		frame->Show();
    		return true;
    }
    

    Oder kommt die Zeile

    IMPLEMENT_APP( MyApp )
    

    noch mit in die main.h?



  • In der main.h habe ich immer nach der Klasse noch

    DECLARE_APP(MyApp);
    

    stehen.

    IMPLEMENT_APP(MyApp)
    

    kommt in die main.cpp so wie du es bereits korrekt geschrieben hattest.

    Die Fehlermeldung kommt aus mainframe.cpp Zeile 23. Mach mal eine DOS Konsole auf und tipp einfach mal md5sum ein. Vielleicht hast Du das Programm gar nicht auf deinem Computer. Wenn doch, dann probier den gesamten Befehl aus:

    md5sum C:\MD5\mainframe.h
    

    Bei md5sum ist meistens noch eine Hilfedatei mit allen Parametern dabei. Überprüfe auch, ob die md5sum von deiner Anwendung überhaupt aufgerufen werden kann (Siehe Windows Umgebungsvariable path).

    Von den Tutorialvideos auf YT halte ich persönlich gar nichts. Wenn jemand Wissen vermitteln will, dann soll er eine ordentliche Website aufsetzen und alle Informationen mitliefern, die man zum Nachbauen benötigt. Schritt für Schritt und mit Screenshots, ein Video kann da nur noch für den schnellen Überblick herhalten.



  • Hey wenn du einfach wxWidgets verwenden möchtest, dann empfehle ich dir CodeBlocks zuverwenden, bei der Installation wählst einfach das Plugin wxsmith aus, das ist der GUI-Designer - dieser ist aber etwas schwieriger als der von MS Visual Studio oder von Netbeans (Java).
    Daher empfehle ich dir diese Seite hier http://wiki.codeblocks.org/index.php?title=WxSmith_tutorials
    Ich habe es auch erst heute hinbekommen das alles läuft.
    Wie du dann WxWidgets für CodeBlocks konfigurierst, erfährst du hier http://www.youtube.com/watch?v=D-7VJ1oav1o

    Bei mir klappt's aufjeden Fall endlich. Bin dabei auch schon ein kleines Prog zu schreiben.



  • @Xbody

    Wenn du die Fragen von DarkBug gelesen hättest, dann wüßtest du, dass er bereits C::B verwendet. Sein Problem ist: das Video ist unklar und/oder unvollständig.

    Glaubst du wirklich, dass er was davon hat wenn du ihn jetzt vom wxFormBuilder zu wxSmith schickst und noch ein Tutorialvideo andrehst???
    Außerdem ist der wxFormBuilder wesentlich leistungsfähiger als das wxSmith Plugin.

    Schön dass du dich für wxWidgets begeistert hast. Wenn du DialogBlocks oder PHES ausprobierst, dann wirst du feststellen, dass es auch wesentlich einfacher geht. 😃

    Nebenbei, ich kenne keinen Profi, der C::B verwendet. Sorry!



  • kakadu schrieb:

    @Xbody

    Wenn du die Fragen von DarkBug gelesen hättest, dann wüßtest du, dass er bereits C::B verwendet. Sein Problem ist: das Video ist unklar und/oder unvollständig.

    Glaubst du wirklich, dass er was davon hat wenn du ihn jetzt vom wxFormBuilder zu wxSmith schickst und noch ein Tutorialvideo andrehst???
    Außerdem ist der wxFormBuilder wesentlich leistungsfähiger als das wxSmith Plugin.

    Schön dass du dich für wxWidgets begeistert hast. Wenn du DialogBlocks oder PHES ausprobierst, dann wirst du feststellen, dass es auch wesentlich einfacher geht. 😃

    Nebenbei, ich kenne keinen Profi, der C::B verwendet. Sorry!

    Mag eben kein MS Visual Studio und das andere Zeugs, weil ich unter Linux und Windows schreiben möchte. Gibt's zwar Alternativen, aber Code::Blocks ist das einzige Program, dass unter beiden System sauber läuft.

    Was verwendest den du den so? 😕



  • Xbody schrieb:

    kakadu schrieb:

    @Xbody

    Wenn du die Fragen von DarkBug gelesen hättest, dann wüßtest du, dass er bereits C::B verwendet. Sein Problem ist: das Video ist unklar und/oder unvollständig.

    Glaubst du wirklich, dass er was davon hat wenn du ihn jetzt vom wxFormBuilder zu wxSmith schickst und noch ein Tutorialvideo andrehst???
    Außerdem ist der wxFormBuilder wesentlich leistungsfähiger als das wxSmith Plugin.

    Schön dass du dich für wxWidgets begeistert hast. Wenn du DialogBlocks oder PHES ausprobierst, dann wirst du feststellen, dass es auch wesentlich einfacher geht. 😃

    Nebenbei, ich kenne keinen Profi, der C::B verwendet. Sorry!

    Mag eben kein MS Visual Studio und das andere Zeugs, weil ich unter Linux und Windows schreiben möchte. Gibt's zwar Alternativen, aber Code::Blocks ist das einzige Program, dass unter beiden System sauber läuft.

    Was verwendest den du den so? 😕

    Das ist zwar ein wenig offtopic, aber ich verwende Visual C++ Professional und wxWidgets seit mehr als 5 Jahren zusammen. Und es funktioniert großartig.
    wxFormbuilder ist definitiv das bessere Tool, im Vergleich mit wxSmith.
    Aber ich nutze auch nicht die Code-Generation, sondern wxRC.



  • Mag eben kein MS Visual Studio und das andere Zeugs, weil ich unter Linux und Windows schreiben möchte. Gibt's zwar Alternativen, aber Code::Blocks ist das einzige Program, dass unter beiden System sauber läuft.

    Was hat dir bei DialogBlocks, PHES und wxFormBuilder unter Windows bzw. Linux nicht gefallen?
    Wenn du die Probleme/Fehler näher beschreibst, könnte man den Entwicklern eine Liste mit den gefunden Fehlern schicken und wir hätten dann alle was davon. 😃



  • @kakadu: Stimmt, md5sum ist eine Konsolenanwendung für Linux. Diese habe ich nicht, weil ich Windows benutze. Das hatte ich gar nicht realisiert, da liegt der Fehler.

    Nebenbei, ich kenne keinen Profi, der C::B verwendet. Sorry!

    Was für Cross-Platform-IDEs benutzen Profis denn, die plattformunabhängig programmieren müssen/wollen?



  • *push*



  • Marktführer ist noch Nokia mit dem QT Creator.

    Wer auf wxWidgets steht 😃 😃 und sich nicht an einen Großkonzern binden will, besitzt zumindest DialogBlocks (Ist in dem wxWidgets Buch bereits enthalten). Dann gäb´s noch PHES 2011.
    (Unter http://wiki.wxwidgets.org/Tools findest du die passenden Links)

    Es soll aber auch C++ Entwickler geben, die in der Java IDE Eclipse das CDT installieren und dann alles per Hand reinklopfen. 😕



  • [quote="Xbody"][quote="kakadu"].... Nebenbei, ich kenne keinen Profi, der C::B verwendet. Sorry![/quote]
    Mag eben kein MS Visual Studio und das andere Zeugs, weil ich unter Linux und Windows schreiben möchte. Gibt's zwar Alternativen, aber code:Blocks ist das einzige Program, dass unter beiden System sauber läuft.

    Was verwendest den du den so? 😕[/quote]

    Qt Creator duerfte zumindest den Anspruch "laeuft auf Windows, Linux und anderswo, und kann C++" erfuellen.


Anmelden zum Antworten