Forum: PC-Programmierung C++ Tutorial Windows GUI


von M. M. (blackcow)


Lesenswert?

Ich kenne mich mit C für AVRs relativ gut aus und habe ein wenig 
Erfahrung mit Objektorientierte Programmierung in C#.

Mein Ziel ist es ein kleines Programm für einen Laserexposer zu 
schreiben. Dabei sollen Bild-Dateien geladen werden und die einzelnen 
Zeilen per RS232 an den Controller geschickt werden.

Da das Programm auf einer relativ alten Krücke mit WinXP laufen soll und 
ich .Net vermeiden will, halte ich C++ für ein geeignetes Werkzeug.

Kennt jemand ein gutes Tutorial für C++ wo man sich in 
GUI-Programmierung einarbeiten kann?

von Stefan F. (Gast)


Lesenswert?

Dann schaue Dir mal Qt an (www.qt.io). Das ist gut dokumentiert und 
läuft auf älteren rechnern samt IDE brauchbar.

von Plauzenhannes (Gast)


Lesenswert?

M. M. schrieb:
> Kennt jemand ein gutes Tutorial für C++ wo man sich in
> GUI-Programmierung einarbeiten kann?

"C-API pur" würde ich mir heute für eine GUI nicht mehr antun. In deinem 
Fall wäre vielleicht ein leichtgewichtiger Wrapper (z.B. Win32++ oder 
WTL) geeignet.

von Klaus (Gast)


Lesenswert?

M. M. schrieb:
> habe ein wenig
> Erfahrung mit Objektorientierte Programmierung in C#.

Also hast du keine Ahnung von objektorientierter Programmierung.

Qt ist quasi die Standardbibliothek für C++ (wie die glibc für C). Da 
solltest du dich mal einlesen. Es gibt auch genügend Hilfe dazu.

von Peter II (Gast)


Lesenswert?

Klaus schrieb:
> Qt ist quasi die Standardbibliothek für C++ (wie die glibc für C).
bei dir vielleicht.

andere verwenden z.b. wxWidgets.

von Stefan F. (Gast)


Lesenswert?

Qt ist nicht die Standard Bibliothek für C++. Die Standardbibliothek von 
C++ heisst stdlib.

Qt ist ein Framework zur Plattform übergreifenden Entwicklung grafischer 
Anwendungen.

Die Qt Library kann als Alternative oder zusammen mit der stdlib 
verwendet werden. Sie Kapselt die Funktionen des Betriebssystems so, 
dass die Programmierung weitgehend unabhängig vom Betriebssystem ist. Im 
Idealfall kann ein einziger Quelltext sowohl unter Linux, als auch unter 
Windows, Mac-OS, Android und einige weitere Betriebssysteme compiliert 
werden.

Als Beispiel mag man sich meine Demo-App zur Kommunikation mit µC 
anschauen, Screenshots und Download auf der Seite 
http://stefanfrings.de/net_io/index.html

Man kommt allerdings trotz Qt nicht ganz drumherum, das Programm auf 
allen Zielplattformen zu testen und in Details anzupassen. So sehen 
normale Menüs z.B. unter Windows und Linux prima aus, aber auf einem 
Smartphone ziemlich Kacke. Und Geräte mit Touch-Screen haben keine 
rechte Maustaste und kein Drag&Drop. Dafür gibt es dort diverse Gesten, 
die ein gewöhnlicher PC (ohne Touch Screen) wiederum nicht unterstützt.

Weiterhin gehört noch die Entwicklungsumgebung Qt Creator dazu. Man kann 
aber auch Microsoft Visual Studio benutzen. Im Prinzip kann man jede 
beliebige IDE benutzen, mit anderen wird die Einrichtung und Benutzung 
allerdings komplizierter.

Qt Creator eignet sich auch zur Entwicklung von Programmen ohne 
grafische Oberfläche. Ich habe damit z.B. einen Webserver geschrieben.

Ich mag an Qt, dass es in vielerlei Hinsicht wie die Java 
Laufzeitbibliothek funktioniert, aber in "echten" Maschinencode 
compiliert wird - also eben kein Java ist.

>> Erfahrung mit Objektorientierte Programmierung in C#.
> Also hast du keine Ahnung von objektorientierter Programmierung.

Verstehe ich nicht. C# ist definitiv eine Objektorientierte Sprache, und 
zwar wie aus dem Lehrbuch. Objektorientiert geht gar nicht.

von Rolf M. (rmagnus)


Lesenswert?

Stefan U. schrieb:
> Qt ist nicht die Standard Bibliothek für C++. Die Standardbibliothek von
> C++ heisst stdlib.

Beim gcc heißt sie libstdc++.

> Qt ist ein Framework zur Plattform übergreifenden Entwicklung grafischer
> Anwendungen.

Wobei man nicht auf grafische Anwendungen beschränkt ist. Man kann die 
graphischen Teile von Qt auch komplett weglassen (also gar nicht erst 
dazulinken) und z.B. einen Server damit programmieren.

von c-hater (Gast)


Lesenswert?

Stefan U. schrieb:

> Verstehe ich nicht. C# ist definitiv eine Objektorientierte Sprache, und
> zwar wie aus dem Lehrbuch. Objektorientiert geht gar nicht.

Richtig. Aber man kann sie auch wie ein Anfänger verwenden. Und dann 
kommt fast rein prozeduraler Code raus. Man merkt dann fast nix von der 
Objektorientierung.

Klar, natürlich werden da eigentlich Methoden von Objekten implementiert 
und natürlich werden darin oft andere Objekte benutzt.

Wirklich objektorientierte Programmierung ist aber doch noch was ganz 
anderes.

So in der Art wird das wohl gemeint gewesen sein.

von chris_ (Gast)


Lesenswert?

>Da das Programm auf einer relativ alten Krücke mit WinXP laufen soll und
>ich .Net vermeiden will, halte ich C++ für ein geeignetes Werkzeug.

Ich finde Java besser. Es ist deutlich einfacher als C++ und läuft auf 
jedem Rechner.

von rykomick (Gast)


Lesenswert?

chris_ schrieb:
>>Da das Programm auf einer relativ alten Krücke mit WinXP laufen
> soll und
>>ich .Net vermeiden will, halte ich C++ für ein geeignetes Werkzeug.
>
> Ich finde Java besser. Es ist deutlich einfacher als C++ und läuft auf
> jedem Rechner.

Echt? Kann ich ein Java Programm als eine einzelne ausführbare Datei 
ausliefern ohne, dass irgendetwas installiert werden muss? In C++ kein 
Problem....

von Mark B. (markbrandis)


Lesenswert?

rykomick schrieb:
> Echt? Kann ich ein Java Programm als eine einzelne ausführbare Datei
> ausliefern ohne, dass irgendetwas installiert werden muss? In C++ kein
> Problem....

Ja. Näheres zu diesem nicht ganz trivialen Thema siehe hier:

http://www.excelsior-usa.com/articles/java-to-exe.html

von Rolf M. (rmagnus)


Lesenswert?

chris_ schrieb:
> läuft auf jedem Rechner.

Das wird irgendwie immer gerne behauptet, aber von den Java-Programmen, 
mit denen ich so bisher Kontakt hatte, funktioniert das mit so gut wie 
keinem.

von M. M. (blackcow)


Lesenswert?

Vielen Dank für die Anregungen! Ich werde mich in Qt einarbeiten.

von Stefan (Gast)


Lesenswert?

M. M. schrieb:
> [...] ich .Net vermeiden will [...]

Und genau da liegt das Problem. Eine einfache GUI-Oberfläche ist nur mit 
einem Framework machbar. Willst Du .net nicht, musst Du dafür das 
nächste Framework ins Projekt ziehen, sei es Qt, GTK+, WxWidgets oder 
wie sie alle heißen. Gut, teilweise kann man die benötigten Teile vom 
Framework in die ausführbare Datei mit Linken, aber im Grunde bleibts 
eine Abhängigkeit. Will man sowieso eine Software nur für Windows 
erstellen, dann ist C# mit .net eigentlich eine gute Wahl, funktioniert 
auch unter Windows XP problemlos. Will man keine Abhängigkeit, dann 
bleibt nur der mühsame WinAPI-Weg. Ein reiner Wechsel des Frameworks 
bringt dann wenig, vorallem wenn man schon Erfahrung mit einem hat (Rein 
sportliche Gründe mal ausgenommen ;-) ).

von Pit (Gast)


Lesenswert?

M. M. schrieb:
> da das Programm auf einer relativ alten Krücke mit WinXP laufen soll

Wenn das auf einer 'alten Krücke' laufen soll, dann kann die 
Programmiersprache nicht alt genug sein.

Nimm die WIN32 API. Lässt sich hervorragend mit dem Visual Studio 
programmieren (in Deinem Fall wohl die Visual Studio 2010 Express 
Edition).

Hier gibt es auch noch einen echt tollen grafischen Editor:
http://www.resedit.net/

Hier ist ein Beispiel dazu, als Grundlage sozusagen (Win32 Demo in C++):
http://ahidlib.com/index.php/free-download

Gruß Pit

von nicht“Gast„ (Gast)


Lesenswert?

Moin,

Mit was für einem Tempo wird den Deine serielle Schnittstelle befeuert?

Mich deucht, die Wahl der Sprache ist bei deinem Projekt nicht das 
entscheidende. Wenn du schon etwas C# kannst wirst du wahrscheinlich 
damit schnellere Programme schreiben als mit C++

Grüße.

Nachdem den Programm eher so nach Dreizeiler (Achtung Übertreibung) 
klingt sollte es ja nicht so schwer sein mal einen einfachen Prototypen 
z erstellen und zu schauen ob's reicht.

In C++ einzuarbeiten und in QT noch dazu... Viel Spaß das ist ein Riesen 
Brocken und Deine C Kenntnisse sind dabei nicht wirklich hilfreich.

Grüße

von Hans Richard Werner Christiansen (Gast)


Lesenswert?

Peter II schrieb:
> Klaus schrieb:
>> Qt ist quasi die Standardbibliothek für C++ (wie die glibc für C).
> bei dir vielleicht.
>
> andere verwenden z.b. wxWidgets.

Jap.

Oder gtkmm.

Oder FLTK, wenn es leichtgewichtig sein soll.

Oder gar mit SDL selber zeichnen.

Möglichkeiten über Möglichkeiten...

von Mehmet K. (mkmk)


Lesenswert?

Ein Framework, das die eigentliche Frage des TO nach einem Tutorial zum 
Teil abdeckt:

http://www.ultimatepp.org/
http://www.ultimatepp.org/app$ide$GettingStarted$en-us.html

von chris_ (Gast)


Lesenswert?

Autor: Rolf Magnus (rmagnus)
>chris_ schrieb:
>> läuft auf jedem Rechner.

>Das wird irgendwie immer gerne behauptet, aber von den Java-Programmen,
>mit denen ich so bisher Kontakt hatte, funktioniert das mit so gut wie
>keinem.

Das ist seltsam, bei mir funktioniert das mit meinen selbst 
geschriebenen Programmen die ganze Zeit. Die Programme laufen alle ohne 
Änderung auf Win, Linux, Mac, RasPi. Mache ich am Ende irgendwas 
richtig?

von Rolf M. (rmagnus)


Lesenswert?

chris_ schrieb:
> Mache ich am Ende irgendwas richtig?

Mag sein. Schade, dass du da anscheinend der einzige bist.

von Stefan F. (Gast)


Lesenswert?

> Mache ich am Ende irgendwas richtig?


Ja, du setzt vermutlich nicht voraus, dass ein ein Laufwerk mit Namen 
"C:\" gibt.

Es ist wirklich peinlich, wie viele Java Anwendungen an diesem und 
ähnliche Kleinkram scheitern.

von Mark B. (markbrandis)


Lesenswert?

Stefan U. schrieb:
>> Mache ich am Ende irgendwas richtig?
>
>
> Ja, du setzt vermutlich nicht voraus, dass ein ein Laufwerk mit Namen
> "C:\" gibt.
>
> Es ist wirklich peinlich, wie viele Java Anwendungen an diesem und
> ähnliche Kleinkram scheitern.

Dann liegt es freilich an der Dummheit der Programmierer. Nicht an Java 
selbst.

von Fred (Gast)


Lesenswert?

>Ja, du setzt vermutlich nicht voraus, dass ein ein Laufwerk mit Namen
>"C:\" gibt.
>Es ist wirklich peinlich, wie viele Java Anwendungen an diesem und
>ähnliche Kleinkram scheitern.

Peinlich aber auch das Wissen einiger Foristen.
Wenn oben geschrieben wird, dass die Java Programme auf Win, Mac, Linux 
und RasPi laufen: Wie viel Computerkenntnisse braucht man eigentlich, um 
zu wissen, dass es bei Linux kein c: gibt?

von J. S. (engineer) Benutzerseite


Lesenswert?

Fred schrieb:
> Peinlich aber auch das Wissen einiger Foristen.
Da sagst du was:

> Wie viel Computerkenntnisse braucht man eigentlich, um
> zu wissen, dass es bei Linux kein c: gibt?
Wenn man ein LW über einen alias mounted, gibt es sehr wohl auch "c" und 
zwar sowohl für linux- als auch Windows-Partitionen. Les- und schreibbar 
:-)

Peter II schrieb:
> andere verwenden z.b. wxWidgets.
Und zwar nicht wenige! Auch ich habe früher viel damit gemacht. 
Besonders nett fand ich den wxDesigner, wo  man die Menüpunkte aus dem 
Programm selbst heraus anlegen und editieren konnte. War das Menü 
fertig, hat man es einfach gespeichert.

http://freecode.com/projects/wxdesigner

Scheint aber nicht mehr gepflegt zu werden.(???)

wxWidgets als solches wird aber noch vorangetrieben, gab erst kürzlich 
ein Release. Früher war das das Einzigste, was es an freien Libs auf dem 
Sektor gab. QT war ja zunächst nicht frei.

Was serielle Programmierung anging, habe ich damals mit der CTB-LIB 
gearbeitet. Auf der Webseite des Entwicklers gibt es auch noch meine 
Doku zum Laden:
https://iftools.com/download/ctb/spmdwx.pdf

Unter Linux waren damals schon 460k an Datenrate drin!

von Rolf M. (rmagnus)


Lesenswert?

Stefan U. schrieb:
> Ja, du setzt vermutlich nicht voraus, dass ein ein Laufwerk mit Namen
> "C:\" gibt.

Hat nicht mit Java zu tun, aber passt so gut: Ich bin mir noch nicht 
sicher, ob ich lachen oder weinen soll, wenn ich merke, dass das blöde 
Acrobat-Plugin für Firefox mal wieder in meinem Homeverzeichns eine 
Datei namens "C:\nppdf32Log\debuglog.txt" angelegt hat.

Stefan U. schrieb:
> Es ist wirklich peinlich, wie viele Java Anwendungen an diesem und
> ähnliche Kleinkram scheitern.

Oft scheitert es ja schon daran, dass das Java-Programm in ein 
Installer.exe gesteckt wurde und dann nach der Installation über 
irgendwelche verschlungenen Verkettungen von .bat- und .exe-Files 
gestartet wird.

Mark B. schrieb:
>> Es ist wirklich peinlich, wie viele Java Anwendungen an diesem und
>> ähnliche Kleinkram scheitern.
>
> Dann liegt es freilich an der Dummheit der Programmierer. Nicht an Java
> selbst.

Naja, wenn da fast alle dran scheitern, sagt das auch was über die 
Sprache aus.

von Mark B. (markbrandis)


Lesenswert?

Rolf M. schrieb:
> Mark B. schrieb:
>> Dann liegt es freilich an der Dummheit der Programmierer. Nicht an Java
>> selbst.
>
> Naja, wenn da fast alle dran scheitern, sagt das auch was über die
> Sprache aus.

Wenn der Bauer nicht schwimmen kann, ist die Badehose dran Schuld ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.