SDL vs. Qt4

    • daegga
      daegga
      Bronze
      Dabei seit: 11.02.2007 Beiträge: 2.255
      was kann das eine, was das andere nicht kann? und umgekehrt.
      SDL ist ja für spiele gedacht, Qt für normale programme mit grafischem frontend.
      kann ich die jeweiligen bibliotheken auch im jeweils anderen bereich einsetzen? ergo window-form-programmierung mit SDL und grafikfunktionen für direktes schreiben in den grafisspeicher mit Qt?
      wie siehts mit den restlichen funktionen aus? zB sound, netzwerk
      wie siehts mit der performance aus?

      hat da jemand erfahrungen bzw. einen guten link parat?
  • 11 Antworten
    • crt32
      crt32
      Bronze
      Dabei seit: 17.02.2007 Beiträge: 15.895
      Ich benutze zwar beides nicht, aber SDL ist eine Grafiklibrary, in etwa vergleichbar mit OpenGL und DirectX, während QT sowas wie GTK ist, also eine Library für GUIs (wie du schon selbst festgestellt hast).
      Warum solltest du denn die Libraries im jeweils anderen Bereich einsetzen wollen?
      Macht irgendwie keinen Sinn; wenn dann würde ich einfach beides parallel benutzen, und zwar QT für die GUI und SDL für die Grafik.

      Beschreib doch mal genauer, was du vorhast.
    • daegga
      daegga
      Bronze
      Dabei seit: 11.02.2007 Beiträge: 2.255
      es geht eigentlich darum, sich nicht für jeden bereich in eine eigene library einarbeiten zu müssen.
      will ich (mehr oder weniger) plattformunabhängig programmieren, muss ich Qt für GUI, SDL für 2D grafik und OpenGL für 3D grafik beherrschen. dazu kommt, dass verschiedene funktionen dann ja doppelt vorhanden sind...ergo in SDL und Qt. SDL ist ja auch C (gut, gibt einen C++ wrapper), Qt ist C++.
      schön wär halt eine library, die das alles zusammenfasst und eine einheitliche struktur aufweist. und wenn es nur eine kapselung wäre mit SDL, Qt und OpenGL draunter.
      da ich etwas von OpenGL in Qt4 gelesen habe (QtOpenGL oder so) dachte ich mir, dass vl. Qt4 in richtung dieses komplettpaketes geht.
    • crt32
      crt32
      Bronze
      Dabei seit: 17.02.2007 Beiträge: 15.895
      Naja die eierlegende Wollmilchsau, die du gerne hättest, gibt es nicht.
      Wenn du die verschiedenen Libraries reduzieren willst, benutz halt OpenGL für 2D Grafik und bau das dann mit QtOpenGL ein.
      Aber QtOpenGL ist auch nichts anderes als OpenGL, nur halt schön in das QT-Framework eingebaut ;)

      Im Übrigen wärst du mit deiner Frage wohl in nem Programmierer Forum besser aufgehoben als in einem Poker Forum =)
    • daegga
      daegga
      Bronze
      Dabei seit: 11.02.2007 Beiträge: 2.255
      ist mir klar, hab aber keine lust mich extra irgendwo anzumelden...war nur grad so ne idee :P programmier im moment eigentlich gar nicht aktiv...zumindest nicht durchgängig/regelmäßig.

      OpenGL für 2d ist ja angeblich nicht das wahre. außerdem geht es mir eigentlich eh nur um 2d graphik, 3d ist erstmal egal. dass für ein 2d programm ein 3d-beschleuniger vorhanden sein muss, ist dann eher suboptimal (muss es überhaupt? hab zumindest noch kein opengl programm auf einer nicht-3d-fähigen graka zum laufen bekommen...aber da war halt immer auch kleine 3d teile drinnen)
    • crt32
      crt32
      Bronze
      Dabei seit: 17.02.2007 Beiträge: 15.895
      Original von daegga
      OpenGL für 2d ist ja angeblich nicht das wahre. außerdem geht es mir eigentlich eh nur um 2d graphik, 3d ist erstmal egal. dass für ein 2d programm ein 3d-beschleuniger vorhanden sein muss, ist dann eher suboptimal (muss es überhaupt? hab zumindest noch kein opengl programm auf einer nicht-3d-fähigen graka zum laufen bekommen...aber da war halt immer auch kleine 3d teile drinnen)
      Wenn du so primitive (nicht negativ zu verstehen) 2D Grafik programmierst, kannst auch ganz auf HW Beschleunigung verzichten.
      Bei anspruchsvolleren Sachen (Spiele mit Animationen zB) kommst halt um HW Beschleunigung kaum drumherum und da würde ich dir dann doch OpenGL/SDL oder DirectX (ok, das fällt weg wenns cross-plattform sein soll) empfehlen.
      SDL dürfte sich eigentlich was verschiedene Grafikkarten angeht genauso/ähnlich wie OpenGL verhalten.
      OpenGL kannst ja auch per HEL (hardware emulation layer) überall laufen lassen, also sollte das da eigentlich keine Probleme geben.
    • elbarto132
      elbarto132
      Bronze
      Dabei seit: 24.03.2008 Beiträge: 4.622
      ich verstehe irgendwie nicht so ganz was du da großartig mischen willst
      für ne 3d anwendung nimmste opengl
      für nen 2d spiel halt sdl
      und für ne anwendung mit ner gui nimmste halt qt, gtk, wx, etc...
      solang du also keine 3d cad anwendung programmieren willst musste da eigentlich nix mischen ;)
    • daegga
      daegga
      Bronze
      Dabei seit: 11.02.2007 Beiträge: 2.255
      ich will halt wieder bisschen zurück in die c++ welt finden (meine derzeitige hauptsprache ist java) und das ganze etwas über die konsolenprogrammierung hinausbetreiben (nach konsolenprogrammierung hab ich eben auf java gewechselt und nichts im c/c++ bereich gemacht)
      um das ganze plattformübergreifend zu gestalten stoße ich auf im prinzip 2 bibliotheken: einerseits SDL, andererseits Qt
      SDL ist auf 2D-grafik ausgelegt, Qt auf GUI
      jedoch haben beide frameworks zusätzliche bibliotheken, wie multithreading, netzwerkansteuerung, sound, etc.
      für gewöhnlich mischt man das dann nicht, also wenn ich mit SDL programmier, dann verwende ich auch dessen soundfunktion etc.
      ergo muss ich doppelt lernen, wenn ich beides können will.
      zusätzlich ist SDL in C, Qt in c++ und auch ansonsten ja anders aufgebaut. einheitlicher aufbau wie größtenteils in java wäre halt wünschenswert.

      also die grundfunktionen von SDL und Qt zu mischen bringt ja nichts. aber wie sieht ein vergleich von den restlichen funktionen aus? die ganzen multimedia und netzwerksachen. ist das eine um so viel besser als das andere oder sind die in etwa gleich auf. ich kann ja zB 2D grafik von SDL nehmen und das ganze andere zeug von Qt (multimedia, multithreading etc). ist ja grundsätzlich kein problem. die frage ist hier, was ist besser (performanter, handlicher, funktionsreicher)?
    • elbarto132
      elbarto132
      Bronze
      Dabei seit: 24.03.2008 Beiträge: 4.622
      das hängt einfach davon ab was du genau machen willst, welche pakete man da am besten verwendet, und wie man das dann evtl mischt

      aber grundsätzlich benutzt man einfach kein c++ mehr für gui programmierung, da es viel zu unkomfortabel is. c++ benutzt man nurnoch für sehr rechenintensive programme bzw halt spiele oder sehr hardware nahe sachen. allerdings schreibt man da dann auch eher das kern programm in c++ und die gui wieder in ner anderen sprache.
      wenn du mal was anderes willst guck dir c# an, mit mono auch auf linux lauffähig, oder sowieso die beste sprache die es gibt: python ;)
    • daegga
      daegga
      Bronze
      Dabei seit: 11.02.2007 Beiträge: 2.255
      pff c#, dieses billige java immitat ^^ an dem hab ich lange genug meine zeit verschwenden müssen, ist mir äußerst unsympathisch die sprache...
      auf dem level hab ich ja eh java, low-level hab ich C, dazwischen ist halt noch platz für C++ mit anständigen bibliotheken
    • elbarto132
      elbarto132
      Bronze
      Dabei seit: 24.03.2008 Beiträge: 4.622
      naja, c# is halt von ms, aber eigentlich isses garnicht so schlecht, steht halt von seinem einsatzgebiet her irgendwo zwischen java und c++
      die frage bei c und c++ is halt einfach... wozu brauch man überhaupt die leistungsfähigkeit? schreibste regelmäßig programme mit komplexen, zeitkritischen berechnungen, oder sehr hardware nahe sachen, das es sinn macht sich mit so komplexen sachen herum zu schlagen? oder sind es doch meistens eher kleinere programme, ne gui, bißchen netzwerk oder datenbanken kram, bißchen was berechnen?

      wenn bei dir eher das zweite der fall is, dann nochmal die empfehlung: python, ne genialere sprache gibts dafür nicht ;)
      http://de.wikipedia.org/wiki/Python_(Programmiersprache)
      Standardbibliothek [Bearbeiten]

      Bei Python sind die „Batterien inbegriffen“

      Python verfügt über eine große Standardbibliothek, wodurch es sich für viele Anwendungen gut eignet. Das liegt an der sogenannten „batteries included“-Philosophie der Python-Module. Die Module der Standardbibliothek können mit in C oder Python selbst geschriebenen Modulen ergänzt werden.

      Die Standardbibliothek ist besonders auf Internet-Anwendungen zugeschnitten, mit der Unterstützung einer großen Anzahl von Standardformaten und -Protokollen (wie Multipurpose Internet Mail Extensions und HTTP). Module zur Schaffung grafischer Schnittstellen, zur Verbindung mit relationalen Datenbanken und zur Manipulation regulärer Ausdrücke sind ebenfalls enthalten.

      Die Standardbibliothek ist eine der größten Stärken von Python. Das meiste davon ist plattformunabhängig, so dass auch größere Python-Programme oft auf Unix, Windows, Mac OS X und anderen Plattformen ohne Änderung laufen.

      Mit Hilfe des mitgelieferten Moduls Tkinter kann in Python (wie in Perl und Tcl) schnell eine grafische Oberfläche (GUI) mit Tk erzeugt werden. Es gibt darüber hinaus eine Vielzahl von weiteren Wrappern von Drittanbietern. Sie stellen Anbindungen (engl. language bindings) zu GUI-Bibliotheken anderer Programmiersprachen wie z. B. PyGTK, PyQt, PyKDE, wxPython, PyObjC und PyFLTK zur Verfügung.
    • daegga
      daegga
      Bronze
      Dabei seit: 11.02.2007 Beiträge: 2.255
      zusätzlich python zu lernen macht für mich nicht viel sinn... privat verwende ich für kleine programmchen eh auch java (performance ist da ja sowieso nicht wichtig), in unternehmen wird denk ich python auch nicht sehr oft eingesetzt.
      geht hier aber weniger um meine privaten programmierergüsse (obwohl es mich reizen würde, irgend so ein kleines spielchen per c++ zu schreiben...), sondern eher um berufliche aussichten. c++ wird halt noch viel verwendet (va. für off-the-shelf programme). natürlich könnte ich hierzulande in jeder größeren stadt auch eine stelle als java-programmierer bekommen. früher oder später werde ich meine blicke aber richtung norwegen richten (zumindest temporär), dort sind die größeren unternehmen (zB. Opera, Trolltech) halt noch sehr auf c++ fixiert, va. wenn es um die kernkomponenten geht. java (EE) wird halt mehr unternehmensintern verwendet, bei größeren firmen, die findet man aber in größerer anzahl im europäischen zentralgebiet als in periphärielage.