sitemap link mailform link home

C++ mit Code::Blocks und wxWidgets

Beitrag vom 4. Februar 2016

Mein Betriebssystem: Externer Link Xubuntu 14.04.3 LTS (64-Bit)
Das ISO-Image muss für die Installation von Xubuntu mit dem Windows-Programm Externer Link Win32 Disc Imager auf einen USB-Stick (1 GByte oder größer) übertragen werden. Danach den PC / Notebook mit der Boot-Option "USB-Stick" starten...


Installation Code:Blocks IDE und wxWidgets (GUI-Bibliothek)

Das geht ganz leicht mit Hilfe des Ubuntu Software Centers.

 

Anm.: Man kann Code::Blocks und wxWidgets auch in Windows 7 und Co. installieren. Bisher ist mir das jedoch nicht geglückt. Cry

Vergessen Sie bitte nicht, unten alle Häkchen zu setzen!

Der Compiler, der Debugger, die Contrib plugins und wxWidgets nämlich werden unbedingt gebraucht.

Codeblocks installieren

 

Eine einfache Stoppuhr mit Code::Blocks und wxWidgets programmieren

So soll die kleine Stoppuhr aussehen:

Screenshot

Zip-Ordner Stoppuhr-Projekt für Code::Blocks / wxWidgets, 250 kByte


Ich erläutere hier nur ganz kurz, wie man diese Stoppuhr "baut".

Als erstes gestaltet man seine GUI mit dem GUI-Builder wxSmith.

Wir erstellen ein neues Projekt mit wxWidgets, wählen wxWidgets 3.0x  und nennen es Stoppuhr02 und erstellen ebenfalls einen Ordner Stoppuhr02.

Screenshot

Wir wählen danach wxFormBuilder und Dialog Based aus.

Schließlich wählen wir noch Create Empty Project aus.

Das führt zu der folgenden Meldung, die wir mit OK bestätigen:

Screenshot

Es wird automatisch ein neuer wxDialog angelegt (mit OK bestätigen oder Namen ändern).

Die folgende Meldung ebenfalls mit OK bestätigen:

Screenshot

Sobald nun die leere Arbeitsfläche erscheint, wählen wir wxSmith - AddwxDialog:

Screenshot

Damit erhalten wir die Fläche des späteren Fensters, die wir nun mit widgets (Buttons, Textfelder usw.) bestücken können:

Screenshot

Nun ist es wichtig, ganz zu Anfang ein wxPanel (aus dem Tab Standard) einzufügen.
Auf diesem Panel können danach alle 3 Buttons, die wxStaticBox (Beschriftung "Zeit in Sekunden") und das Textfeld wxStaticText (also die "0") frei positioniert werden:

Screenshot

Die Buttons beschriften wir (Label) wir mit Reset, Start und Stopp.

Dabei ist gut zu erkennen, dass es eine Hierarchie gibt in den Resources. Dort erscheinen alle widgets, die wir in das Fenstern eingefügt haben in der Form wxButton:Button1 (Beispiel).

Dabei ist wxButton die Klasse und Button1 der Name der von uns erzeugten Instanz.
Die Beschriftung der Buttons (Label) ändert natürlich nichts am Namen der Instanz.


Einen wxTimer brauchen wir natürlich auch. Der findet sich im Tab Tools:

Screenshot

Wichtig: Öfter mal speichern!

Nun soll noch die Font-Size des wxStaticText vergrößert werden. Falls man es dabei etwas übertreibt (Schrift zu groß) stürzt Code::Blocks leider ab. Vor diesem Schritt noch einmal zu speichern ist also eine super Idee!
Ich habe eine Schriftgröße von 24 ausgewählt. Als Label von wxStaticText1 schreiben wir eine "0" in das Feld "Label" in den Eigenschaften des widgets.

Nun werden die widgets (Button1, Button2, Button3, StaticText1 und wxTimer) der Reihe nach doppelt angeklickt. Dabei entstehen sofort die entsprechenden Event Handler im neuen Tab Stoppuhr02Main.cpp:

Screenshot

In die Funktionen der Event Handler schreiben wir nun den jeweiligen Code für die Aktionen, die bei Tastendruck oder Ablauf des Timerintervalls von Timer1 ausgeführt werden sollen:

 

void Stoppuhr02Dialog::OnButton1Click(wxCommandEvent& event)
{
    // Reset
    Timer1.Stop();
    // Ausgabe "0" in Textfeld
    StaticText1->SetLabel(_T("0"));

}

void Stoppuhr02Dialog::OnButton2Click(wxCommandEvent& event)
{
    // Start
     Timer1.Start();

}

void Stoppuhr02Dialog::OnButton3Click(wxCommandEvent& event)
{
    // Stopp
    Timer1.Stop();
}

void Stoppuhr02Dialog::OnTimer1Trigger(wxTimerEvent& event)
{
    // Label von wxStaticText 1 in ZahlString speichern:
    wxString ZahlString = StaticText1->GetLabel();
    // long int Zahl1 deklarierern
    long Zahl1;
    // ZahlString in long int umwandeln
    ZahlString.ToLong(&Zahl1);
    // Zahl1 um 1 erhöhen und wieder in wxString umwandeln
    Zahl1++;
    wxString StaticText1Output = wxString::Format(wxT("%d"), Zahl1);
    // Ausgabe in Textfeld
    StaticText1->SetLabel(StaticText1Output);
}

Das sieht dann so aus:

Screenshot

Wenn alles fertig ist wählen wir Build and run. Dann müsste das compilierte GUI-Programm erscheinen und auch funktionieren:

Screenshot

Dieses Stoppuhr-Programm lässt sich natürlich noch verbessern.
Als Schnell-Einstieg ist es aber in dieser simplen Form bestens geeignet, um schnell ein Gefühl für die Arnbeitsweise mit Code::Blocks und wxWidgets / wxSmith zu bekommen.

.

Letzte Änderung:
March 23. 2023 21:04:40
«    top    »