Forum: PC-Programmierung Welche C++ Entwicklungsumgebung?


von Ben _. (burning_silicon)


Lesenswert?

Diese Frage richtet sich vor allem an hier anwesende C++ Freaks, die 
noch etwas freie Zeit haben. :)

Habe mich entschieden, mit C++ anzufangen und bin nun auf der Suche nach 
einer guten Entwicklungsumgebung/Toolchain, die möglichst frei verfügbar 
ist und für die ich hier im Forum Hilfe bekommen kann wenn irgendwas 
nicht so funktioniert wie ich es mir vorstellen.

Der alte Thread ist inzwischen sehr lang, unübersichtlich und wird 
wahrscheinlich nicht mehr von vielen gelesen, deswegen ein neuer für 
speziell C++.

von B e r n d W. (smiley46)


Lesenswert?

Dann fang ich mal mit Visual Studio Express an.

von Sven B. (scummos)


Lesenswert?

Und ich fahre mit KDevelop fort. ;)

Außerdem rate ich dem TO einfach mal was zu machen statt vier Jahre lang 
nach dem perfekten Set von Tools zu suchen.

von franz (Gast)


Lesenswert?

qt-creator+gcc
oder
eclipse + gcc

von Ben _. (burning_silicon)


Lesenswert?

Ich habs vergessen reinzuschreiben - diesmal bitte wirklich keine 
Frameworks. Bibliotheken, die man für irgendwas tolles gebrauchen kann, 
gerne in Hülle und Fülle, aber keine Frameworks!

von Sven B. (scummos)


Lesenswert?

oO ?!

von Helmut (Gast)


Lesenswert?

Scheint für dich ziemlich schwierig zu sein, zu Potte zu kommen:

"Grafikprogrammierung C++ oder C#"
Beitrag "Grafikprogrammierung C++ oder C#"

"Welche Programmiersprache für Windows-Oberfläche?"
Beitrag "Welche Programmiersprache für Windows-Oberfläche?"

Such dir lieber jemanden, der dein Spiel für dich programmiert.

von Ben _. (burning_silicon)


Lesenswert?

@Helmut
Sach ma kannst Du es nicht lassen, mir diesen Thread zuzumüllen?! Was 
hast Du denn für eine Ahnung was ich programmieren will? Wer gibt Dir 
das Recht mir vorzuschreiben was ich zu tun, zu lassen oder zu lernen 
habe?!

Sorry, ich WILL halt nunmal in C++ reinschauen und ich denke/hoffe ich 
find hier auch Leute, die mir das ermöglichen.

@Scummos
Ja, ist schwer, das Richtige zu finden. :-/ Will mir mal anschauen was 
mit reinem C++ und evtl. ein paar nötigen Bibliotheken möglich ist und 
was nicht. Danach bin ich wieder ein bißchen schlauer.

von Sven B. (scummos)


Lesenswert?

Du wist auf jeden Fall durch diesen Thread hier nicht schlauer werden. 
In den bisherigen fünf wurde wirklich alles zu dem Thema gesagt.

(Trotzdem kann ich natürlich keine Gelegenheit auslassen, Werbung für 
KDevelop zu machen ;))

von Helmut (Gast)


Lesenswert?

>Sach ma kannst Du es nicht lassen, mir diesen Thread zuzumüllen?!

Wenn du aufhörst, das Forum mit fast identischen Fragen zuzumüllen.

von Ben _. (burning_silicon)


Lesenswert?

> (Trotzdem kann ich natürlich keine Gelegenheit auslassen, Werbung für
> KDevelop zu machen ;))
Na gut, das sei Dir gegönnt. ;)

Aber kannst Du auch sinnvoll begründen wieso ich nacher nicht schlauer 
sein sollte als vorher? Liegts an dem Problem "Thread" oder an dem 
Problem "C++"?

von Sven B. (scummos)


Lesenswert?

Es liegt daran, dass verschiedene Leute verschieden arbeiten, und 
verschiedene IDEs und Editoren bevorzugen. Dasselbe gilt für Toolkits, 
Programmiersprachen, ...
Du kannst allein durch rumfragen, auch bei Leuten, die du für kompetent 
hältst, nicht rausfinden, mit was du gut arbeiten können wirst. Das 
kannst du nur, indem du einfach mit irgendetwas anfängst, und wenn du 
feststellst "nee, suckt weil X", zu etwas anderem wechselst. Bis du ein 
Set von Tools gefunden hast, die für dich geeignet sind. Das können auch 
20 Threads zu "welche IDE ist die beste -- welche Sprache ist die beste 
-- welches Toolkit ist das beste" nicht ersetzen, ja, die können 
nichtmal besonders viel dabei helfen. Das ist denke ich auch der Grund, 
warum einige Leute hier etwas genervt sind ;)

von Stefanie B. (sbs)


Lesenswert?

qt-creator+gcc

funktioniert bestens für reine C++ Entwicklung :)

von Adler (Gast)


Lesenswert?

Ben _ (burning_silicon) schrieb

> Ich habs vergessen reinzuschreiben - diesmal bitte wirklich keine
> Frameworks.

Aber Windows GUI-Programme willste doch schreiben oder etwa nicht?

von Sven B. (scummos)


Lesenswert?

Adler schrieb:
> Ben _ (burning_silicon) schrieb
>
>> Ich habs vergessen reinzuschreiben - diesmal bitte wirklich keine
>> Frameworks.
>
> Aber Windows GUI-Programme willste doch schreiben oder etwa nicht?

Frag lieber nicht.

von Ben _. (burning_silicon)


Lesenswert?

> Aber Windows GUI-Programme willste doch schreiben oder etwa nicht?
Nicht nur, aber die direkte Frage würde ich bejahen.

Es sind viele Sachen in C++ geschrieben, die auch GUI unter Windows 
können. Also muß es doch irgendwie funktionieren, gibts irgendeinen 
plausiblen Grund wieso das nicht mehr mit C++ gemacht werden sollte, 
auch wenns mit Frameworks evtl. wirklich schneller geht?

@Scummos
Da magst Du Recht haben. Das Problem ist aber, daß zB. wenn ich ein 
Problem mit Compiler X habe und nach einer Lösung frage bestimmt drei 
Mann ankommen und meckern "Klar, daß Du damit Probleme hast, Compiler Y 
ist doch Welten besser!" oder "Da kann ich Dir auch nicht helfen weil X 
nutzt doch keine Sau."

Meine, nochmal meine simple Frage nach einem Fenster mit ein paar 
anklickbaren Linien drin, so quasi als fortgeschrittenes Hallo-Welt zum 
draus lernen - die Frage ist komplett im Sande verlaufen.

von Sven B. (scummos)


Lesenswert?

Ben _ schrieb:
> Es sind viele Sachen in C++ geschrieben, die auch GUI unter Windows
> können. Also muß es doch irgendwie funktionieren, gibts irgendeinen
> plausiblen Grund wieso das nicht mehr mit C++ gemacht werden sollte,
> auch wenns mit Frameworks evtl. wirklich schneller geht?
Die Frage haben wir schon oft diskutiert, und sie ist auch schon oft gut 
erklärt worden. Ich glaube, du kannst die Antwort nicht verstehen, ohne 
selbst mal eine Weile mit C++ gearbeitet zu haben. Siehe zum Beispiel 
Beitrag "Re: Grafikprogrammierung C++ oder C#" ;)

> @Scummos
> Da magst Du Recht haben. Das Problem ist aber, daß zB. wenn ich ein
> Problem mit Compiler X habe und nach einer Lösung frage bestimmt drei
> Mann ankommen und meckern "Klar, daß Du damit Probleme hast, Compiler Y
> ist doch Welten besser!" oder "Da kann ich Dir auch nicht helfen weil X
> nutzt doch keine Sau."
Das wird aber immer so sein, egal wie lange du rumfragst. Das ist 
schließlich das Internet hier. Es gibt dann zwei Möglichkeiten
1) du wechselst zu Y und testest ob der wirklich besser ist
2) du weißt schon, dass Y auch Mist ist und ignorierst diese Leute 
einfach

> Meine, nochmal meine simple Frage nach einem Fenster mit ein paar
> anklickbaren Linien drin, so quasi als fortgeschrittenes Hallo-Welt zum
> draus lernen - die Frage ist komplett im Sande verlaufen.
Siehe oben. Die Frage ist nicht so banal, wie sie sich anhört.

Grüße,
Sven

von Ben _. (burning_silicon)


Lesenswert?

Dann frag ich mal direkt. Würdest Du so ein Beispiel hinkriegen, wenn 
ja, womit?

Kennt sich wer mit SDL aus, kommt das mit C++ klar?

von Sven B. (scummos)


Lesenswert?


von Verwirrter Anfänger (Gast)


Lesenswert?

libsdl.org schrieb:
> ... SDL is written in C, but works with C++ natively ...

Dritter Absatz, direkt auf der Startseite.

von Ben _. (burning_silicon)


Lesenswert?

Hab nur den Wiki Artikel gelesen.

@Scummos
Arbeiten diese Funktionen zur Laufzeit, sprich kann ich zB. eine Linie 
oder sonstwas zu einer bereits bestehenden Ansammlung dazuzeichnen oder 
dient das nur zur Erstellung eines statischen Bildschirms?

Ich find im Moment diese ganzen Bezeichner bei Qt&Co verwirrend und 
nervend.

von Sven B. (scummos)


Lesenswert?

Hä?

"Laufzeit" bedeutet "wenn das Programm ausgeführt wird". Natürlich 
werden die Funktionen ausgeführt, wenn das Programm läuft -- der 
Compiler wird das ja kaum übernehmen.

Was ist eine "bereits bestehende Ansammlung"? Eine existierende 
QGraphicsScene? Ja, da kann man was dazuzeichnen. Ein Bild? Da kann man 
auch was dazuzeichnen.

Grüße,
Sven

von Ben _. (burning_silicon)


Lesenswert?

Hmm vielleicht denke ich zu primitiv. Ich denke im Moment nicht an 
irgendwelche Layer, sondern eine ganz einfache Bitmap, nur einen 
einzigen Layer. Also Punkt X Y hat die Farbe Z. Wenn ich darauf zur 
Laufzeit einen Befehl SonstewasLine mit zwei Endpunkten A/B und einer 
Farbe C anwende, erwarte ich, daß sich umgehend in dieser Bitmap die 
Bildpunkte zwischen A und B mit der Farbe C füllen... Ist das korrekt 
oder funktioniert das bei solchen Programmen anders?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wurde Code::Blocks schon genannt?

Gibt's für Windos und Linux und Mac, ist nicht so ausgeblasen wie 
Eclipse, funktioniert mit zig Compilern, ...

von Sven B. (scummos)


Lesenswert?

Ben _ schrieb:
> Hmm vielleicht denke ich zu primitiv. Ich denke im Moment nicht an
> irgendwelche Layer, sondern eine ganz einfache Bitmap, nur einen
> einzigen Layer. Also Punkt X Y hat die Farbe Z. Wenn ich darauf zur
> Laufzeit einen Befehl SonstewasLine mit zwei Endpunkten A/B und einer
> Farbe C anwende, erwarte ich, daß sich umgehend in dieser Bitmap die
> Bildpunkte zwischen A und B mit der Farbe C füllen... Ist das korrekt
> oder funktioniert das bei solchen Programmen anders?

QGraphicsScene macht was anderes, das verwaltet nämlich die Objekte, die 
sich in der Scene befinden. Du kannst also eine Linie auch wieder 
löschen.
Wenn du einfach nur Bitmaps malen willst, kannst du z.B. mit einem 
QPainter http://qt-project.org/doc/qt-4.8/qpainter.html in ein QPixmap 
malen, oder vergleichbar bei anderen Bibliotheken.

von Frank K. (fchk)


Lesenswert?

Ben _ schrieb:
> Hmm vielleicht denke ich zu primitiv. Ich denke im Moment nicht an
> irgendwelche Layer, sondern eine ganz einfache Bitmap, nur einen
> einzigen Layer. Also Punkt X Y hat die Farbe Z. Wenn ich darauf zur
> Laufzeit einen Befehl SonstewasLine mit zwei Endpunkten A/B und einer
> Farbe C anwende, erwarte ich, daß sich umgehend in dieser Bitmap die
> Bildpunkte zwischen A und B mit der Farbe C füllen... Ist das korrekt
> oder funktioniert das bei solchen Programmen anders?

Windows GUI-Programmierung funktioniert anders. Du musst Deine Denkweise 
umstellen. Dein Programm ruft nichts auf, Du wirst aufgerufen, bekommst 
Window Messages und musst diese schnellstmöglich bearbeiten. Die Window 
Messages können angeklickte Menüpunkte, Tastdrücke, Mausbewegungen, 
angeklickte Buttons oder ein minimiertes oder maximiertes 
Programmfenster sein. Oder auch ein WM_PAINT, d.h. die Aufforderung an 
Dich, Dein Fenster neu zu zeichnen. In diesem Fall musst Du Dir den zum 
Fenster gehörenden Device Context holen und Deine Linie in den DC 
reinmalen.

Die Windows API ist C. Das ++ ist nicht erforderlich. Früher gabs 
"Programming Windows" von Charles Petzold. Die neueste Version ist aber 
für C# und für Dich nutzlos. Versuch eine alte Ausgabe zu bekommen und 
arbeite die durch.

fchk

von Sven B. (scummos)


Lesenswert?

Naja, man kann ja einfach das Pixmap im Hintergrund irgendwo haben, und 
wenn ein PaintEvent kommt, zeigt man einfach das Pixmap an. Dann hat man 
die von Ben beschriebene Situation.

von Ben _. (burning_silicon)


Lesenswert?

Heißt, bevor ich wirklich was malen darf muß ich warten bis Windows es 
"sehen will"? Woher weiß es wann ich was malen will?

Und wenn ein anderes Fenster den Platz meines Fensters auf dem 
Bildschirm beansprucht, stellt Windows den überschriebenen Teil nicht 
von selbst wieder her wenn mein Fenster wieder in den Vordergrund kommt?

von Sven B. (scummos)


Lesenswert?

Dein Programm wartet i.d.R. bis der Window Manager sagt "das Fenster ist 
jetzt sichtbar, mal' mal", und dann zeichnet es seinen Kram. Das ist 
auch sinnvoll, denn dann zeichnet das Programm zum Beispiel nicht die 
ganze Zeit seine Widgets neu, während es minimiert ist.

Und nein, der überschriebene Teil wird nicht von selbst 
wiederhergestellt -- erst, wenn dein Programm das nächstes mal den 
Bildschirm neu zeichnet. Das sieht man ja auch ganz gut an diesen 
lustigen Zeichenfehlern, die auftreten, wenn der GUI-Thread irgendeines 
Programms mal hängt.

Grüße,
Sven

von Ben _. (burning_silicon)


Lesenswert?

Na das ist ja übel.

Meine, das mit den Messages war mir klar, aber daß ich jederzeit mein 
eigenes Fenster komplett wiederherstellen können muß find ich kacke.

Mal angenommen ich male 'ne Mandelbrotmenge und irgendwas übermalt mir 
einen Teil des Fensters - dann kann ich von vorne anfangen, wenn ich die 
Ausgabe nirgendwo gepuffert habe?

von Sven B. (scummos)


Lesenswert?

Naja deshalb malst du ja auch nicht in den Buffer von der Grafikkarte, 
sondern in ein QPixmap oder sowas. Dann kannst du den Inhalt 
wiederherstellen, indem du einfach das Pixmap nochmal anzeigst.

Aber ja, wenn du die paint()-Methode von, keine Ahnung, irgendeinem 
Widget neu implementierst, dann geht jedes Mal alles verloren, was 
vorher da war, also jeder Aufruf der Funktion muss das komplette Bild 
neu zeichnen. Macht man ja aber auch nicht, wenn das Zeichnen viel 
Aufwand ist. Schon deshalb, weil das Zeichnen dann im GUI-Thread 
passiert, das heißt, während gezeichnet wird, blockiert deine Anwendung 
und zeichnet das Fenster zum Beispiel nicht neu, wenn der Benutzer es 
skaliert oder so.

von Ben _. (burning_silicon)


Lesenswert?

Das sind aber Probleme, die ich bei Qt, C# usw. auch hätte, oder?

Ist das beim Vollbildmodus genauso?

von Stefanie B. (sbs)


Lesenswert?

Ben _ schrieb:
> Dann frag ich mal direkt. Würdest Du so ein Beispiel hinkriegen, wenn
> ja, womit?
>
> Kennt sich wer mit SDL aus, kommt das mit C++ klar?

als Beispielprojekt C++ mit SDL1.2 sei http://www.flarerpg.org/ genannt

von Sven B. (scummos)


Lesenswert?

Ben _ schrieb:
> Das sind aber Probleme, die ich bei Qt, C# usw. auch hätte, oder?
Das sind keine Probleme. So funktioniert's halt einfach. Ich sehe auch 
echt kein Problem hier... in welchem Fall soll das denn ein Problem 
sein?

Aber ja, das funktioniert immer so, weil das der Window Manager vom 
Betriebssystem so macht (von jedem mir bekannten Betriebssystem 
zumindest)

von Frank K. (fchk)


Lesenswert?

Ben _ schrieb:
> Na das ist ja übel.
>
> Meine, das mit den Messages war mir klar, aber daß ich jederzeit mein
> eigenes Fenster komplett wiederherstellen können muß find ich kacke.

Diese Designentscheidung kommt aus den Anfangstagen, als Speicher knapp 
war. Und sie hat sich bewährt.

> Mal angenommen ich male 'ne Mandelbrotmenge und irgendwas übermalt mir
> einen Teil des Fensters - dann kann ich von vorne anfangen, wenn ich die
> Ausgabe nirgendwo gepuffert habe?

Du kannst ja auch problemlos in einen offscreen Device Context malen, 
den Du dann im WM_PAINT Handler nur noch mit BitBlt() ins Window 
kopieren musst.

fchk

von Ben _. (burning_silicon)


Lesenswert?

Wie oft kommt denn so eine Paint-Message?

EDIT:
> als Beispielprojekt C++ mit SDL1.2 sei http://www.flarerpg.org/ genannt
Gar nicht schlecht, aber ich fürchte um sich da als C++ Anfänger 
reinzuarbeiten schon zu groß, zu komplex, oder?

von Sven B. (scummos)


Lesenswert?

Das kommt auf alles mögliche an, aber wenn mit so 30-60 Events pro 
Sekunde muss man schon rechnen, würde ich sagen.

von Ben _. (burning_silicon)


Lesenswert?

Muß ich mich auch noch drum kümmern in welchen Bereich des Bildschirms 
ich den Puffer reinkopieren muß wenn das Fenster verschoben wird usw.?

Ich glaub langsam ich bleib bei PHP ... Oder ich bräuchte wirklich ein 
"fertiges" Programm dieser Art als Grundgerüst zum Lernen und erweitern.

von Sven B. (scummos)


Lesenswert?

Vielleicht wird dir langsam klar, warum man nicht mit Assembler in den 
Grafikbuffer schreibt, sondern ein geeignetes Framework benutzt.

Wenn du zum Beispiel Qt verwendest, musst du dich um sowas nicht 
kümmern, wenn du nicht willst. QGraphicsScene lässt dich deine Striche 
zeichnen und kümmert sich selbst um den ganzen PaintEvent-Kram.

von Ben _. (burning_silicon)


Lesenswert?

Klaue ich Dir viel von Deiner Zeit wenn ich Dich bitte so ein 
Beispielprogramm zu schreiben, nur damit ich's mir mal anschauen kann 
wie das aussieht und wie's funktioniert?

Mit Assembler hat das nicht viel zu tun. Ich kann in Assembler ja auch 
Konsolen-Anwendungen schreiben und brauch mich da kein bißchen um das 
Fenster zu kümmern. Bzw. ich kann in diesem Fenster ausgeben was ich 
will und Windows kümmert sich um den Rest.

von Stefanie B. (sbs)


Angehängte Dateien:

Lesenswert?

Ben _ schrieb:
> Wie oft kommt denn so eine Paint-Message?
>
> EDIT:
>> als Beispielprojekt C++ mit SDL1.2 sei http://www.flarerpg.org/ genannt
> Gar nicht schlecht, aber ich fürchte um sich da als C++ Anfänger
> reinzuarbeiten schon zu groß, zu komplex, oder?

Anbei eine Datei um ein Fenster darzustellen. (33 Zeilen)
zu kompilieren mit:
1
 g++ simpletest.c -I /usr/include/SDL/ -lSDL

Naja wenn man komplizierte Dinge will, muss man viel programmieren.
Wenn du nur ein paar Buttons, Textboxen etc haben willst, wäre QT 
vielleicht doch besser. ;)

von Stefanie B. (sbs)


Lesenswert?

Stefanie B. schrieb:
> zu kompilieren mit: g++ simpletest.c -I /usr/include/SDL/ -lSDL

Well on unix that is... Ich wüsste nicht stante pede wie man soetwas 
unter Windows kompiliert.

von Sven B. (scummos)


Lesenswert?

Hier in Qt, 8 Zeilen. :D
1
#include <QtGui/QApplication>
2
#include <QtGui/QLabel>
3
4
int main(int argc, char** argv) {
5
    QApplication app(argc, argv);
6
    QLabel label("Hello World!");
7
    label.show();
8
    return app.exec();
9
}

g++ -o test test.cpp $(pkg-config --libs --cflags QtGui)

> Well on unix that is... Ich wüsste nicht stante pede wie man soetwas
> unter Windows kompiliert.
Das ist ein Mysterium, das weiß niemand. ;)

von Ben _. (burning_silicon)


Lesenswert?

Sven, vermutlich ist Dir noch nicht klar, daß Du gerade das Todesurteil 
Deiner Freizeit unterschrieben hast... **fg** ;)

Ich werd mal sehen wo ich Qt für Windows herbekomme und schaue mir das 
mal an. Wenn ich damit klarkommen sollte dann bleibt C++ den Anwendungen 
vorbehalten, die keine Fenster brauchen.

EDIT:
> QT-Syndrom, eine seltene lebensgefährliche Krankheit
Na das fängt ja gut an!

von Sven B. (scummos)


Lesenswert?

Qt ist C++ ;)

von Ben _. (burning_silicon)


Lesenswert?

481 Megabyte ?! oO

Sind die irre? Na das wird mich ein wenig Zeit kosten, in meiner Gegend 
gibts kein VDSL... :(

von Sven B. (scummos)


Angehängte Dateien:

Lesenswert?

Hier ein tolleres Beispiel mit Linien und Rechtecken. Weil mir grad 
langweilig ist.
1
#include <QtGui/QApplication>
2
#include <QtGui/QGraphicsScene>
3
#include <QtGui/QGraphicsView>
4
#include <QtGui/QMainWindow>
5
#include <QtGui/QMenuBar>
6
#include <QtGui/QAction>
7
8
int main(int argc, char** argv) {
9
    QApplication app(argc, argv);
10
    QMainWindow mainwin;
11
    QGraphicsScene scene;
12
    QGraphicsView view;
13
    view.setScene(&scene);
14
    mainwin.setCentralWidget(&view);
15
16
    QPen pen;
17
    pen.setColor(Qt::red);
18
    scene.addLine(0, 0, 30, 30, pen);
19
    pen.setColor(Qt::blue);
20
    scene.addRect(15, 15, 70, 70, pen);
21
22
    QMenu* appMenu = mainwin.menuBar()->addMenu("Application");
23
    QAction quit("Quit", &mainwin);
24
    appMenu->addAction(&quit);
25
    QObject::connect(&quit, SIGNAL(triggered(bool)), &mainwin, SLOT(close()));
26
27
    mainwin.show();
28
    return app.exec();
29
}

Und hier die CMakeLists.txt:
1
project(testproject)
2
add_executable(test test.cpp)
3
find_package(Qt4 REQUIRED)
4
include_directories(${QT_INCLUDE_DIR})
5
target_link_libraries(test ${QT_QTCORE_LIBRARIES} ${QT_QTGUI_LIBRARIES})

So, das war's jetzt aber mit Beispielprogrammen für heute ;)

In dem Fall kümmert sich jetzt zum Beispiel Qt komplett um das Zeichnen, 
wenn du das Fenster skalierst, oder minimierst, oder sontwas machst.

von chris (Gast)


Lesenswert?

> Sven B.

Hey, danke. Gerade eben wollte ich nach einem einfachen Beispiel fragen, 
weil das Example von Qt selbst ( 
http://qt-project.org/doc/qt-4.8/qpainter.html ) deutlich zu überladen 
ist.

von Sven B. (scummos)


Lesenswert?

Ja, die Beispiele aus den Qt Docs sind nur hilfreich, wenn man schon 
eine funktionierende Anwendung hat und da was einbauen will, da stehen 
nie komplette Anwendungen. Das ist einerseits natürlich sinnvoll, weil 
man das meist nicht braucht, aber andererseits am Anfang etwas 
anstrengend ;)

von Ben _. (burning_silicon)


Lesenswert?

Joo, wird eh noch dauern bis ich damit rumprobieren kann. Klebe bei 20% 
vom Download.

Verwendest Du das eigentlich unter Windows oder Linux?

von Sven B. (scummos)


Lesenswert?

Linux ;)

von Stefanie B. (sbs)


Lesenswert?

QT ist unter Windows recht einfach. Einfach das passende Packet unter
http://qt-project.org/downloads herunterladen und installieren.
Dann QTCreator starten und das gewünschte Projekt öffen, bauen, starten 
:)

Ich benutze auch Linux.

von Frank K. (fchk)


Lesenswert?

Und wenn Du wissen willst, wie das ganze komplett ohne QT oder ein 
anderes Framework geht, lies das hier:

http://pronix.linuxdelta.de/C/win32/win32_1.shtml

von Ben _. (burning_silicon)


Lesenswert?

Ganz so einfach ists dann doch nicht...

Svens Beispiel einfach mal zu compilieren versucht ergibt:

mainwindow.obj:-1: Fehler:LNK2005: _main ist bereits in main.obj 
definiert.

main.obj:-1: Fehler:LNK2019: Verweis auf nicht aufgelöstes externes 
Symbol ""public: virtual __thiscall MainWindow::~MainWindow(void)" 
(??1MainWindow@@UAE@XZ)" in Funktion "_main".

main.obj:-1: Fehler:LNK2019: Verweis auf nicht aufgelöstes externes 
Symbol ""public: __thiscall MainWindow::MainWindow(class QWidget *)" 
(??0MainWindow@@QAE@PAVQWidget@@@Z)" in Funktion "_main".

debug\test.exe:-1: Fehler:LNK1120: 2 nicht aufgelöste externe Verweise.

von Sven B. (scummos)


Lesenswert?

Was hast du denn gemacht?

von Ben _. (burning_silicon)


Lesenswert?

Hey, nicht so vorwurfsvoll... oO

Ich hab Qt installiert, hab Deinen Sourcecode da reingeguttenbergt, das 
Format bei den Includes angepasst und sonst nix.

#include <QApplication> usw.

Das Ding erstellt irgendwie eine main.cpp und eine mainwindow.cpp, kommt 
mir doppelt vor.

von Sven B. (scummos)


Lesenswert?

Ja, dann hast du wohl zwei Anwendungen zusammengeklebt, die man nicht 
zusammenkleben sollte ;)
Kann ich jetzt so aus der Ferne nicht debuggen... wahrscheinlich kannst 
du die mainwindow.cpp einfach löschen, und auch aus dem qmake-project 
file entfernen, u.U. geht es dann schon.

von Merkus (Gast)


Lesenswert?

Ich programmiere momentan eine kleine 2D Engine für Plattformer Games in 
C++. Ich benutze Visual Studio Express 2010

Ben _ schrieb:
> Dann frag ich mal direkt. Würdest Du so ein Beispiel hinkriegen, wenn
> ja, womit?
>
> Kennt sich wer mit SDL aus, kommt das mit C++ klar?


Anstatt der SDL würde ich dir zu SFML raten. Davon ab das die SFML viel 
mehr Features hat, ist SFML in C++ geschrieben und hat eine komplett 
Objektorientierte Libary. Das macht vieles einfacher. SFML hat 5 Module 
(System, Window, Graphics, Network, Audio) welche wiederrum die 
entsprechenden Klassen beinhalten. Sehr übersichtlich im Gegensatz zu 
Qt. Dazu ist die SFML sehr mächtig - es lassen sich wirklich jegliche 
Art von 2D Spielen implementieren und die Einbindung von OpenGL ist 
möglich.

http://www.youtube.com/watch?v=XcVxSSIdiAE

Auf www.sfml-dev.org gibt es auch Tutorials zu den einzelnen Modulen und 
auf Youtube findet man auch einige nützliche Videos die helfen die 
einzelnen Klassen kennenzulernen und generell einen Einstieg in die 
Grafikprogrammierung zu finden.

von Jean Player (Gast)


Lesenswert?

Merkus schrieb:
> Anstatt der SDL würde ich dir zu SFML raten. Davon ab das die SFML viel
> mehr Features hat, ist SFML in C++ geschrieben und hat eine komplett
> Objektorientierte Libary. Das macht vieles einfacher. SFML hat 5 Module
> (System, Window, Graphics, Network, Audio) welche wiederrum die
> entsprechenden Klassen beinhalten. Sehr übersichtlich im Gegensatz zu
> Qt. Dazu ist die SFML sehr mächtig - es lassen sich wirklich jegliche
> Art von 2D Spielen implementieren und die Einbindung von OpenGL ist
> möglich.

Hi Markus ^^,
also Ben hat sich Gott Lob für QT entschieden :-)
dort gibt es OpenGL2 Widgets, also schmeiss die lib bitte von dir weg 
!!!
Die macht keinen sinn zusammen mit QT.
Man könnte noch vll Boost erwähnen, für mehr Portabilität, also in 
Richtung anderer GUI !!!
Oder von mir aus für 3D Sachen Oger :)
Aber i denke Ben sollte erstmal mit QT klar kommen :-)

P.S: BEN gute Entscheidung bleib dabei :-)

von Jean Player (Gast)


Lesenswert?

Und Apropo,
Sven in allen Ehren !!!
Aber das ist echt keine gute Art Leuten c++ Code zu zeigen -.-
Alles in der main -.-
NENENE

P.S: ja kleines Programm , aber bitteeeeeeee, so Code nie jemanden 
zeigen !!!

von Jean Player (Gast)


Lesenswert?

@ BEN
poste dein komplttes Projekt als .zip
Dann wird dir geholfen ;-)

MFG

von chris (Gast)


Lesenswert?

>Sven in allen Ehren !!!
>Aber das ist echt keine gute Art Leuten c++ Code zu zeigen -.-

Hi Jean Player,

könntest Du den Code von Sven mal so posten, wie er Deiner Meinung nach 
aussehen sollte?

von Ben _. (burning_silicon)


Lesenswert?

LOL jetzt prallen wieder verschiedenste Programmierstile und Vorlieben 
aufeinander.

Hab's mit ein wenig rumprobieren geschafft, das Ding zu kompilieren (die 
Funktion main aus der main.cpp rausgeschmissen, vermutlich auch nicht 
die saubere Art, aber für nen Test okay), krieg dann aber beim Aufruf 
außerhalb der Entwicklungsumgebung die Meldung, daß qt5widgetsd.dll 
nicht gefunden werden kann.

von Klabauter (Gast)


Lesenswert?

Leute, ihr wohl echt zu viel Zeit? ^^

Ich würde Folgendes vorschalgen: Ben postet seine 
Requirements-Spezifikation (als Word Dokument oder ähnliches). Wir 
setzen dann ein Git-Repo auf, und entwickeln ihm das Programm. Dann hört 
endlich diese nervige Fragerei auf ;-)

Mal im Ernst: ich hab das Gefühl der Autor des Threads bemüht sich kein 
bisschen, mal selber etwas auszuprobieren. Jede Kleinigkeit muss hier 
vorgekaut werden. Aus eigener Erfahrung weiß ich, dass man sowas auch 
sehr gut autodidaktisch lernen kann. Das Netz ist zudem voll von 
hervorragenden Tutorials zu deisen Themen...

von Sven B. (scummos)


Lesenswert?

Jean Player schrieb:
> Und Apropo,
> Sven in allen Ehren !!!
> Aber das ist echt keine gute Art Leuten c++ Code zu zeigen -.-
> Alles in der main -.-
Ich bin sehr gespannt auf deine bessere Version des Programms.

Ben _ schrieb:
> LOL jetzt prallen wieder verschiedenste Programmierstile und Vorlieben
> aufeinander.
Einfach ignorieren.

> Hab's mit ein wenig rumprobieren geschafft, das Ding zu kompilieren (die
> Funktion main aus der main.cpp rausgeschmissen, vermutlich auch nicht
> die saubere Art, aber für nen Test okay), krieg dann aber beim Aufruf
> außerhalb der Entwicklungsumgebung die Meldung, daß qt5widgetsd.dll
> nicht gefunden werden kann.
Das ist doch erstmal egal. Wenn es innerhalb der IDE funktioniert, 
ignorier' das einfach, das lässt sich dann später irgendwann leicht 
lösen.

Gruß,
Sven

von Ben _. (burning_silicon)


Lesenswert?

Wenns sich leicht lösen lässt sag mal wie. :D

Oki, werd mal ein wenig damit rumspielen.

von Sven B. (scummos)


Lesenswert?

Naja ist halt Windows, und das hab ich seit zehn Jahren nicht benutzt. 
Ich kann dir nur sagen, dass man es sicherlich leicht lösen kann, weil 
dein Setup ein absoluter Standard-Fall ist und es bei vielen Leuten 
funktioniert.

von Mark B. (markbrandis)


Lesenswert?

Ben:

Ein guter Weg um eine Programmiersprache (oder ein Framework, eine 
Bibliothek etc.) zu erlernen ist das zugehörige Tutorial 
durchzuarbeiten. Einmal von Anfang bis Ende. Und dann weitere Male - 
solange bis man es verstanden hat. ;-)

von LowM4N (Gast)


Lesenswert?

@Ben
So wie es aussieht hast du so gut wie keine Ahnung von C++.
Lass das Qt erst mal in ruhe und lerne mal reines ANSI C++.
Schreibe für den Anfang ein Paar Konsolen Programme.

Folgende Punkte würde ich dir empfehlen:

- was sind Header / Source Files
- Header Guards
- Datentypen (ist nicht ganz so einfach wie in PHP)
  - int  float  double  char  byte ...
  - Strings (auch mal die alten C like)
  - Komplexe Datentypen (instanzen von Klassen)
- Kontrollstrukturen / Schleifen (schätze kennst du schon aus PHP)
  - if / else
  - switch case
  - for
  - while
  - do while
- Arrays
- Funktionen
  - vll auch Rekursionen
- Emum (Aufzählung)
- Pointer
- Referenzen
- Call by Value / Call by Reference (bei Funktionen)
- Heap (new / delete)

später auch vll mal OOP:
- Klassen
- Instanzen
- Attribute
- Methoden

- usw... gibt noch viel mehr

- Design Patters (Singleton  Observer  Factory ...)

- Makefiles (Qt hat dafür z.B. qmake)

wenn du diese Sachen mal drauf hast, dann kannst du schon mal einen Teil
der Basics und kannst dich an Frameworks wie QT setzen.

Als kleine Übung könntest du z.B. einene Labyrinth solver mit 
Backtracking
programmieren.

von Sven B. (scummos)


Lesenswert?

Also ich finde ja dieses "du musst erstmal x y z a b c d e f lernen, 
bevor ich dir zugestehe, dass du das machen darfst, was du eigentlich 
willst" immer ein bisschen albern...

Das erste, was ich mit C++ gemacht habe, war auch mit Qt und ich hab's 
auch gelernt. Man muss nun wirklich nicht unbedingt erstmal die C 
strings und diese schrecklichen C++-Arrays und den Factory Pattern 
verstehen, um damit was zu programmieren...

Sicherlich sind das auf deiner Liste alles Sachen, die man sich 
irgendwann mal anschauen muss, aber das ist auch schon alles.

von Sven B. (scummos)


Lesenswert?

Na, wenn du das sagst... ich habe die C-Strings jedenfalls nie 
gebraucht, und vor allem nicht deren schreckliche API.

von Sven B. (scummos)


Lesenswert?

Man kann auch eine String-Klasse benutzen. Wie QString. Oder wenigstens 
std::string.

von Georg A. (georga)


Lesenswert?

> ich habe die C-Strings jedenfalls nie gebraucht, und vor allem
> nicht deren schreckliche API.

Du meinst die char*? Wo haben die denn eine API? ;) Aber verkehrt ist es 
nicht, wenn man weiss, wie es geht. So ab und zu muss man ja doch mal 
Systemcalls anfassen...


> std::string

OMG. Das ist gegen QStrings ungefähr so wie Seeigel gegen rosa 
Plüschhase. Wenn man nix anderes hat, sind die std::strings sicher 
besser als das char*-Gefrickel, aber wenn man mal länger QStrings 
gemacht hat, tun die std::strings genauso weh wie char*...

von Sven B. (scummos)


Lesenswert?

Ähh, ja, sorry, das war Quark -- ich meinte die API vom std::string. ;)

Du hast schon Recht, dass man wissen sollte, wie dieser char* Kram 
funktioniert, denn früher oder später stößt man schon mal drauf. Aber 
das ist sicherlich nicht das erste, was man sich anschauen muss, wenn 
man eh Qt benutzt.

Grüße,
Sven

von LowM4N (Gast)


Lesenswert?

Sven B. schrieb:
> Das erste, was ich mit C++ gemacht habe, war auch mit Qt und ich hab's
> auch gelernt. Man muss nun wirklich nicht unbedingt erstmal die C
> strings und diese schrecklichen C++-Arrays und den Factory Pattern
> verstehen, um damit was zu programmieren...

Wen man vorher nur mit Scriptsprachen gearbeitet hat, sollte man sich 
wenigstens die Basics aneignen bevor man sich an dicke Framworks wie Qt 
setzt.

Die Patterns, klar sind am anfang nicht nötig, aber für OOP ist es nicht 
verkehrt einige zu kennen. Qt benutz auch einige Patterns wie z.B. 
Observer (Signale und Slots) und MVC (bei Qt das Model View 
Architecture).

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.