Anfänger sucht Anleitungen für C++/QT



  • Gtkmm (Gtk C++ Binding) verwendet deutlich neueres C++11 und ist auch von der Lizenz weniger problematisch als Qt.



  • @john-0 Qt ist kaum problematisch von der Lizenz her?



  • Naja ... unproblematisch ist anders xD

    Gibt schon einige Sachen unter GPL und QT ist halt ein Unternehmen, die auch grade finanziell etwas schwach darstehen. Keine LTS releases mehr für open source Projekte etc.

    Ob ich davon jetzt grade meine Entscheidung abhängig machen würde, vermutlich eher weniger. Aber Gtkmm ist schon definitiv unproblematischer.

    Dafür ist gtkmm halt nach meinem Wissen recht unvollständig. Mit GTK+ ist man da schon besser dran ... aber das ist dann halt auch kein modernes C++ mehr. Und der Fortschritt allgemein von GTK, worauf ja beide basieren, ist langsam.



  • @Leon0402 man kann QT auch im Unternehmen nutzen, ohne die kommerzielle Lizenz zu nutzen. Es ist halt komplizierter. Aber insofern zumindest machbar. Also eigentlich kein Lizenzproblem. Man muss es nur gründlich lesen.



  • @It0101 Hab nix dagegen gesagt 🙂 Nur das eben manche (leider immer mehr) Teile jetzt GPL sind. Ein Beispiel, was die Situation gut zeigt: https://bugreports.qt.io/browse/QTBUG-61630

    TreeView gehört imo zu den Basiskomponenten. Das jetzt unter ne GPL zu packen und auf den QT Marketplace zu schmeißen zeigt mir klar die Richtung in die das Projekt geht.

    Der einzige Grund, warum ich das ganze als einigermaßen harmlos noch betrachte, ist der Knebelvertrag mit KDE 😃

    Das kann man schon nicht ganz mit einem wirlich freien Framework vergleichen



  • @Zhavok sagte in Anfänger sucht Anleitungen für C++/QT:

    @john-0 Qt ist kaum problematisch von der Lizenz her?

    Du wirst bei Qt in ein Abomodell gezwungen, wenn man keine GPL Software hat, und wie @Leon0402 schon schrieb wird LTS nicht mehr als GPL angeboten. Das wird es in Zukunft schwierig machen auf eine kommerzielle Lizenz für Qt zu verzichten.

    Gtkmm ist vollständig, d.h. man kann über C++ auch alles mit dem Gui machen was mit C möglich ist. Auch Glibmm ist vollständig. Es gibt für die meisten Gnome bzw. Gtk relevanten Libraries eine „mm“ Version für C++. Was es nicht gibt, ist ein C++ Binding für die libsecret. Das muss man sich selbst bauen. GIR ist mit C++ nicht möglich, wenn das auch von den Maintainern von Gtkmm genutzt werden könnte, sie sich aber bisher dagegen entschieden haben.

    Unvollständige Bindings für Gtk gibt es z.B. für Ada und Fortran.



  • @Leon0402 sagte in Anfänger sucht Anleitungen für C++/QT:

    @It0101 Hab nix dagegen gesagt 🙂 Nur das eben manche (leider immer mehr) Teile jetzt GPL sind.

    Ich mache das ganz einfach. Ich gebe die Lizenzbedingungen den Rechtsverdrehern, die für solchen Quark bezahlt werden und das auch schneller raffen als ich. Und wenn die sagen: "unter den und den Bedingungen kannst du das und das machen", dann bin ich fein raus 🙂



  • @It0101 Jup und die Tatsache, dass du es überhaupt Rechtsverdrehern geben muss, zeigt doch schon, dass die Lizenzsituation wesentlich komplizierter ist 😃 Und das sie sagen "unter den Bedingungen".
    Und gewissermaßen sind die Aussagen hier auch ein Blick in die Zukunt ... es wird alles viel schwieriger. Früher waren mal nur Spezial spezial Sachen unter GPL ... LTS releases gab es noch für alle, Downloads offline und ohne Qt Account (geht jetzt nur noch online mit Qt accounts seit neustem) etc.

    Edit: Ich finde das auch okay, dass Unternehmen zur Kasse gebeten werden ... aber bitte halt nicht für Open Source Projekte das Leben schwer machen (die teilweise auch viel selbst zu QT beitragen wie KDE)



  • @It0101 sagte in Anfänger sucht Anleitungen für C++/QT:

    @sudo zu c++ gibt es genug gute Bücher. Was QT angeht kannst du auch einfach hier oder in unserem discord Fragen stellen. Ich mache auch einiges über QT. Wenn ich kann helfe ich gerne. Wobei ich davon abrate, gleichzeitig C++ und QT lernen zu wollen. Beides sind schon für sich genommen umfangreiche Themen. QT verwendet zudem nicht gerade modernstes C++, so dass man als C++-Anfänger leicht auf die schiefe Bahn gerät. Besser ist es wenn man in C++ schon gefestigt ist und erst dann mit QT oder anderen Frameworks anfängt.

    Auf die "schiefe Bahn" bin ich am Anfang bei PHP geraten... ich war damals so "schlau" und habe anhand des PHP-Nukes gelernt... bis mein Script irgendwann gehackt wurde, seit dem lege ich extrem Wert auf Sicherheit und sauberen Code (bei mir gibt es nicht mal Notice-Meldungen).

    Ich werde wohl zuerst C++ lernen



  • @It0101 sagte in Anfänger sucht Anleitungen für C++/QT:

    Ich mache das ganz einfach. Ich gebe die Lizenzbedingungen den Rechtsverdrehern, die für solchen Quark bezahlt werden und das auch schneller raffen als ich. Und wenn die sagen: "unter den und den Bedingungen kannst du das und das machen", dann bin ich fein raus 🙂

    Dank der LGPL bei Gtk/Gtkmm muss man sich mit solchen Problemen gar nicht erst befassen.



  • @john-0 sagte in Anfänger sucht Anleitungen für C++/QT:

    Gtkmm (Gtk C++ Binding) verwendet deutlich neueres C++11

    Inwiefern? Wenn ich in die Doku schaue, sieht das Qt sehr ähnlich. Als Unterschied fällt mir nur die Verwendung von Gtkmm eigenen Smartpointern auf.



  • gtkmm kommt hoffentlich ohne einem Meta-Object Compiler aus?



  • @Swordfish sagte in Anfänger sucht Anleitungen für C++/QT:

    gtkmm kommt hoffentlich ohne einem Meta-Object Compiler aus?

    Ja!

    @manni66 sagte in Anfänger sucht Anleitungen für C++/QT:

    Inwiefern? Wenn ich in die Doku schaue, sieht das Qt sehr ähnlich. Als Unterschied fällt mir nur die Verwendung von Gtkmm eigenen Smartpointern auf.

    Das ist notwendig, weil die zugrundeliegende Glib ein Reference Couting mit C API macht. Die C++ Klasse abstrahiert das ganze so, dass man zwar eine eigene Smartpointerklasse in Gtkmm Glib::RefPtr nutzen muss, aber sie verhält sich so wie man das von einer Smartpointerklasse erwartet.



  • @john-0 aber wo ist das neuere C++11?



  • Schau Dir einfach mal Die Doku an z.B. AboutDialog es wird konsequent noexcept, override, delete, … genutzt, und nicht mehr so Dinge wie throw() oder Kopierkonstruktoren als private deklariert und dann nicht implementiert, was der Stand bei C++1998 war.



  • @john-0 das ist in Qt nicht anders.



  • @john-0 sagte in Anfänger sucht Anleitungen für C++/QT:

    Schau Dir einfach mal Die Doku an z.B. AboutDialog es wird konsequent noexcept, override, delete, … genutzt, und nicht mehr so Dinge wie throw() oder Kopierkonstruktoren als private deklariert und dann nicht implementiert, was der Stand bei C++1998 war.

    So wie das aussieht, spart es mir sogar ein paar Zeilen Code,- gegenüber dem 30 Jahre alten C 🙂



  • @Swordfish sagte in Anfänger sucht Anleitungen für C++/QT:

    gtkmm kommt hoffentlich ohne einem Meta-Object Compiler aus?

    Was ist dein Problem mit dem Meta-Object Compiler?
    Das ding ist ein code generator. Der die definition des Meta-Objects für ein von QObject abgeleitete Klasse erstellt.
    Und diese Definition ist normales C++.

    Oft wird das ablehnen des moc begründet wie das signal/slot konzept in Qt funktioniert.
    Was zu Zeiten vor Qt5 auch eine berechtigte Kritik war.

    Für signals/slot war in Qt4 der moc bzw. das Meta-Object essentiell, da hier der Aufruf eines signals über das Meta-Object lief.
    Und auch das Verbinden eines signals mit einem slot lief darüber (via strings für den namen des signals und den namen des slots).
    Das hatte den Nachteil, dass man erst zur Laufzeit herausfand ob die slot funktion die korrekte parameter definition hat wie das signal, bzw. ob das angegebene signal im entsprechenden Objekt überhaupt existiert.

    In Qt5 ist das aber nicht mehr der Fall dass man für das Verbinden eines Signals mit einer "Slot" Funktion das Meta-Objekt unbedingt benötigt.
    Mit Qt5 kam Unterstützung für std::function like binding von (Member) funktionen und Lambdas.
    https://wiki.qt.io/New_Signal_Slot_Syntax

    Dadurch kann man nun auch Methoden von Klassen, welche nicht von QObject ableiten, an ein Qt signal binden.

    Aber das Meta-Object System in Qt ist mehr als nur eine generische Implementierung eines signal/slot systems.

    Es bietet unter anderem Introspection.
    Bei Gtk+ wird für die introspection auch ein separates tool benötigt. Und man muss Teile der Definitionen duplizieren, da das system die informationen über annotations innerhalb eines Kommentars ausliest:
    https://gi.readthedocs.io/en/latest/annotations/giannotations.html#examples

    /**
     * gtk_link_button_new_with_label:
     * @uri: A URI
     * @label: (nullable): A piece of text or NULL
     */
    GtkWidget *
    gtk_link_button_new_with_label (const gchar *uri,
                                    const gchar *label);
    

    Um jetzt eine Methode einer Klasse (abgeleitet von QObject) in Qt über introspection aufrufbar zu machen reicht das verwenden des Q_INVOKABLE macros

    Quelle: https://doc.qt.io/qt-5/qobject.html#Q_INVOKABLE

    class Window : public QWidget
    {
        Q_OBJECT
    
    public:
        Window();
        void normalMethod();
        Q_INVOKABLE void invokableMethod();
    };
    

    Klar könnte man das ganze auch mit Macros erreichen. Was aber meist in einer längeren Übersetzungszeit mündet und die größe des Binary massiv erhöht.

    CopperSpice bot einen Qt4 fork an, welches den moc durch Macros ersetzte.
    Hier eine seite wo der CopperSpice fork mit moc und einem header only ansatz (Verdigris, welches große Teile der features des moc ersetzen kann) vergleicht.

    https://woboq.com/blog/verdigris-qt-without-moc.html

    Und diese Seite bietet auch einen Übersicht über einiger moc Mythen an:
    https://woboq.com/blog/moc-myths.html



  • @manni66 sagte in Anfänger sucht Anleitungen für C++/QT:

    @john-0 das ist in Qt nicht anders.

    Ah, ich bezog mich auf die Aussage von @It0101, dass Qt nicht so neues C++ nutzen würde. Mein persönlicher Erfahrungsschatz bei Qt beschränkt sich rein auf das Anwenden von Applikationen.



  • @john-0 sagte in Anfänger sucht Anleitungen für C++/QT:

    @manni66 sagte in Anfänger sucht Anleitungen für C++/QT:

    @john-0 das ist in Qt nicht anders.

    Ah, ich bezog mich auf die Aussage von @It0101, dass Qt nicht so neues C++ nutzen würde. Mein persönlicher Erfahrungsschatz bei Qt beschränkt sich rein auf das Anwenden von Applikationen.

    Und ich beziehe mich dabei hauptsächlich auf die Verwendung roher Pointer. Sowohl besitzende als auch nicht-besitzende.


Anmelden zum Antworten