Eigene Widget Klasse für GUI



  • Hallo liebe C++ Community,

    ich würde mich gerne in die GUI Programmierung einsteigen und bin auf der Suche nach einem guten Startpunkt. Wie würdet ihr eine Widget Klasse in C++ aufbauen um davon dann zu erben und Sachen wie Buttons, Slider, Knobs usw. auf den Bildschirm zu zaubern?

    Gibt es da irgendwelche Pattern die sich in der GUI-Programmierung etabliert haben?

    Mein Ziel ist eine kleine eignen GUI Lib die selbst alles zeichnet usw. als Übungsprojekt.



  • @Computerwelt sagte in Eigene Widget Klasse für GUI:

    Mein Ziel ist eine kleine eignen GUI Lib

    „Kleine“ hervorgehoben. Die Frage ist nämlich, was sie alles können und anbieten soll.
    Geht es nur um Controls? Sicher, man erstelle ein Fenster und zeichne alles in eine Bitmap.
    Buttons (push, check, radio), Slider, Scrollbars, Listboxes und damit auch Comboboxes sind vom Arbeitsaufwand noch halbwegs überschaubar, Listviews mit verschiedenen Anichten sind mit gewaltigem Mehraufwand verbunden und bei Editfeldern, die auch noch verschiedene Sprachen unterstützen, hört der Spaß endgültig auf.

    Daher würde ich eigene Controls eher in ein bestehendes System integrieren.



  • Danke für die schnelle Antwort. Also meine GUI soll folgendes können:

    • Button, Slider, Knobs, Ratio Button, Checkboxen, Text
    • So was wie ein Grid Layoutmanger sollte später folgen, ist aber keine Bedingung.
    • Die Widgets sollten automatisch Werte empfangen und senden können, auf welche Art auch immer.
    • Überlappungen von Fenstern oder Widgets soll nicht möglich sein, alles findet auf einer Ebene statt.
    • Gezeichnet werden soll in einem Framebuffer per CPU, vielleicht später per OpenGL.
    • Es soll alles so programmunabhängig wie möglich sein, am besten nur die SDL oder so nutzen.

    Soweit erst mal die Gedanken die ich mir heute dazu gemacht habe.



  • So einfach ist das nicht. Grad wenn Überlegungen wegen der Plattformunabhängigkeit usw. dazukommen.
    Irgendwann musst du wissen, wie man z.B. mit Events vom Betriebssystem umgeht, und wie man das sinnvoll abstrahiert, und ob das beim nächsten Betriebssystem auch funktioniert. Und nicht nur bei Events, da wird sicherlich einiges zusammenkommen.

    Und egal wie du das aufbaust, wirst du wahrscheinlich irgendwann merken, dass das noch nicht passt, irgendwas nicht funktioniert usw.

    Ein GUI Framework ist aus meiner Sicht weder einfach noch interessant. Frameworks wie Qt sind nicht umsonst so kompliziert und unschön.



  • @Computerwelt sagte in Eigene Widget Klasse für GUI:

    Button, Slider, Knobs, Ratio Button, Checkboxen, Text
    So was wie ein Grid Layoutmanger sollte später folgen, ist aber keine Bedingung.
    Die Widgets sollten automatisch Werte empfangen und senden können, auf welche Art auch immer.
    Überlappungen von Fenstern oder Widgets soll nicht möglich sein, alles findet auf einer Ebene statt.
    Gezeichnet werden soll in einem Framebuffer per CPU, vielleicht später per OpenGL.
    Es soll alles so programmunabhängig wie möglich sein, am besten nur die SDL oder so nutzen.

    Dear ImGui



  • Ok, danke für eure Gedanken dazu. Ok, dann ist mein Lernprojekt wohl doch ein paar Nummern zu hoch für ein kleines Freizeitprojekt.

    Wie würdet ihr denn anfangen wenn es nur um eine Widgetbasis klasse geht, wovon ich dann Klassen für einen Button und einen Slider ableiten würde, um mal zwei Beispiele zu nennen. Mausevents könnte von Libs wie SDL oder so kommen. Wie würdet ihr das mit dem Empfangen und Versenden von Events lösen und wie würdet ihre eine Liste von Widget durchgehen ob da nun was angeklickt wurde oder nicht? Einfach ein Vector und dann testen ob die Rechteck Koordinaten von irgendeinem Widget da passen?

    Mir fehlt irgendwie ein Startpunkt, der nicht all zu komplex ist. So eine Art Best Practice Tipp.



  • @Computerwelt sagte in Eigene Widget Klasse für GUI:

    Wie würdet ihr denn anfangen wenn es nur um eine Widgetbasis klasse geht, wovon ich dann Klassen für einen Button und einen Slider ableiten würde, um mal zwei Beispiele zu nennen.

    Ohne ableiten: button, slider
    Mit ableiten: button, slider


Log in to reply