it-swarm.com.de

QT-C ++ vs Generic C ++ und STL

Ich habe in letzter Zeit mein C++ auf Ubuntu QQ aufgefrischt. Ich liebe das Qt-Framework für alles, besonders für das Erstellen von GUIs. Ich bin in den letzten Jahren mit PyQt ziemlich vertraut geworden.

Bei der Verwendung von PyQt gab es einige Probleme, die jetzt bei Verwendung von C++ mit Qt ausgeprägter sind: Qt hat viele Erweiterungen von C++, die Qt-spezifisch sind - QString ist nur ein häufiges Beispiel, ganz zu schweigen von der automatisierten Speicherbereinigung . Es ist möglich, Qt-Anwendungen mit C++ zu schreiben, ohne viel über C++ und die STL zu wissen.

Ich muss vielleicht bald wieder auf den Arbeitsmarkt und möchte C++ - Positionen in Betracht ziehen können - aber ich befürchte, dass eine zu starke Bindung an Qt meine Fähigkeiten zur Arbeit mit generischem C++ einschränken wird, die früher aber ziemlich beeindruckend waren sind jetzt lange ruhend und rostig.

Sollte ich Qt vermeiden? Wäre es besser, WxWidgets oder GTK ++ zum Erstellen von GUIs zu verwenden?

Was ist das beste GUI-Framework, das die Verwendung von generischem C++ und STL am meisten ermöglicht/erfordert? Wie mache ich mich als C++ - Programmierer am marktfähigsten, wenn es um GUI-Frameworks usw. geht?

19
Vector

Ich würde Qt nicht nur aus diesen Gründen unterlassen. Sie müssen nicht alle Dienstprogrammklassen von Qt verwenden. Für diejenigen, die die STL ersetzen, müssen Sie höchstens QString und möglicherweise QStringList verwenden. Außerdem enthält ein Programm normalerweise viel mehr als die grafische Benutzeroberfläche. Sie können für den Rest Ihres Programms immer ausschließlich generisches C++ verwenden und Qt nur für die GUI.

Meiner Meinung nach geht es bei der Arbeit mit STL mehr darum zu verstehen, welche zugrunde liegenden Datenstrukturen verwendet werden und wie komplex sie sind und zu welchem ​​Zeitpunkt Sie jeden Container verwenden sollten. Und wenn es um C++ - Programmierung geht, geht es vor allem darum zu wissen, wie man den sehr wichtigen <algorithmus> -Header verwendet, der auch für Qt-Container funktionieren sollte, da diese STL-kompatibel sind.

Ich sehe keinen großen Schaden darin, all diese Erweiterungen zu verwenden, die Qt bereitstellt, solange Sie wissen (oder zumindest eine allgemeine Vorstellung davon haben), wie sie intern implementiert werden. Stellen Sie sicher, dass Sie wissen, dass Dinge wie Q_OBJECT, SIGNAL (), SLOT (), foreach () keine Magie sind, sondern Makros, die zu gültigen C++ - Anweisungen erweitert werden. Zum Beispiel ist es nicht allzu kompliziert zu verstehen, wie die implizit gemeinsam genutzten Klassen und Eltern-Kind-Beziehungen implementiert werden, durch die sich Qt Java-ähnlicher anfühlt. Sie können jederzeit versuchen, einige Funktionen in einem separaten Projekt neu zu erstellen, um festzustellen, ob Sie dies mit generischem C++ tun können, und sich dann nicht schlecht fühlen, wenn Sie sie in Qt verwenden.

Schauen Sie sich auch die Boost-Bibliotheken an. Sie bieten zusätzliche Dienstprogramme, die die Standard-C++ - Bibliothek nicht bietet, und sind eine gute Möglichkeit, dem generischen C++ ein wenig näher zu kommen, da sie im Wesentlichen den gleichen Konventionen wie das generische C++ folgen. Einige der Bibliotheken haben ziemlich komplexe Vorlagenklassen, und der Versuch, zu verstehen, wie sie funktionieren, ist an sich schon eine gute Studie in C++. Boost verfügt über viele Dienstprogramme, die in Qt nicht zu finden sind, und andere, die dieselben oder ähnliche Konzepte wie einige der Qt-Klassen implementieren und stattdessen verwendet werden können.

Wenn Sie mit C++ auf den Arbeitsmarkt kommen, arbeiten Sie wahrscheinlich mit Qt oder einem anderen Framework, das ähnlich wie dieses über eigene Dienstprogrammklassen verfügt, die versuchen, C++ zu vereinfachen.

15
LLLL

Ich stimme dem größten Lob von Qt zu, aber die Frage war Was ist das beste GUI-Framework, das die meiste Verwendung von generischem C++ und der STL erlaubt/erfordert? In dieser Hinsicht ist Qt ein wenig schizophren : Es dupliziert STL-Container und -Algorithmen mit eigenen Wendungen. Es werden auch Container bereitgestellt, die sich von STL unterscheiden. Die Interoperabilität zwischen Qt und STL ist nicht immer reibungslos. In einigen Fällen sind einige Funktionsaufrufe erforderlich, um von std::string Nach QString und zurück zu gelangen.

wxWidgets bietet eine Option für den STL-Build, bei dem ausschließlich STL-Container verwendet werden. Es gibt kein Paralleluniversum mit selbst erstellten Ersetzungen wie im Fall von Qt. Es wird auch mit einem Standard-C++ - Compiler kompiliert, ohne dass nicht standardmäßige Erweiterungen erforderlich sind. Es ist ein qualitativ hochwertiges GUI-Framework, das es wert ist, in Betracht gezogen zu werden.

Sie können sich auch ein gtkmm ansehen, ein C++ - Wrapper um GTK +. Es ist näher an der Erfüllung Ihrer ersten Anforderung als Qt.

5
Paul Jurczak

Ich würde mir keine Sorgen machen, wenn ich bestimmte STL-Bibliotheken wie std :: string oder std :: iostream oder std :: vector nicht verwenden würde. Die QT-Äquivalente haben einen anderen Geschmack, sind aber nicht so weit entfernt, um Probleme zu verursachen.

Der idiomatischere Unterschied scheint meiner Meinung nach der Programmierstil zu sein, bei dem new für die Zuweisung verwendet wird. Während dies für ein QT-Programm für den Gui-Teil in Ordnung sein kann, besteht der Vorteil von C++ und RAII darin, dass Sie tatsächlich viele Daten auf dem Stapel anstatt auf dem Heap behalten können. Wenn Sie zum Schreiben von Nicht-GUI-Code wechseln, sollten Sie sich daran erinnern.

2
wirrbel