Was sind die gefährlichen Ecken von Qt? [geschlossen]

10

Unter der Sonne gibt es nichts Perfektes. Qt ist keine Ausnahme und hat Einschränkungen: Wir können keine Pixmaps in einem anderen Thread als der GUI verwenden, wir können QImage nicht mit einem 16-Bit-pro-Kanal-Bildformat usw. verwenden.

Welche Situationen haben Sie gezwungen, das Design aufgrund der Einschränkungen von Qt zu verderben?
Was sind die am meisten gehassten Macken?
Welche Designentscheidungen sollte man vermeiden, wenn man Qt in seinen Projekten verwendet?

Reben
quelle
Kannst du das Qt sagen ? Wenn Sie es auf "Q Toolkit" erweitern, können Sie ein "the" davor hinzufügen. Ist es jedoch richtig / empfehlenswert, das Qt zu sagen ? Nur neugierig.
Anto
@Anto: Ich nehme an, theist hier gebunden corners, nicht Qt, aber es ist nur mein intuitives Gefühl, da ich Russe bin :)
Reben
Eine mögliche gefährliche Kurve ist, dass das Projekt möglicherweise in finanziellen Schwierigkeiten steckt. Nokia hat kürzlich eine Vereinbarung mit Microsoft unterzeichnet (um Win7 auf seinen Handys zu verwenden), die die Zukunft von Qt auf wackeligen Boden stellt.
Peter Rowell
Ich bin sehr daran interessiert, diese Antwort zu kennen, weil ich ein Neuling in der visuellen Programmierung von C ++ bin: D
Shaheer
@Vines: Wie wäre es mit "Was sind die gefährlichen Ecken von QT?"?
Chris

Antworten:

12

Ironischerweise würde ich sagen, dass Qts Kraft auch einer der Nachteile ist. Es gibt so viele leistungsstarke Konstruktionen und Erweiterungen, dass Code, den Sie in Qt schreiben, auf "Qt-Weise" leicht stark verankert wird. Der Versuch, Funktionen in eine andere Sprache zu extrahieren, bedeutet nicht nur ein erneutes Schreiben, Sie müssen auch viele Qt-spezifische Technologien kennen.

Die Breite von Qt bedeutet, dass die Einstellung von Programmierern entweder die Verpflichtung gegenüber jemandem mit Qt-Erfahrung oder die Schulung für dieses Fachwissen bedeutet. Es ist schwieriger als Vanilla C ++, einen Auftragnehmer auf den neuesten Stand zu bringen.

Als Qt von 3.x auf 4.x geändert wurde, benötigte unser Team fast 9 Monate, um den Port auszuführen. Während dieser Zeit wurden nur wenige neue Funktionen hinzugefügt. Sie hoffen, diese großen Upgrade-Kosten für den Rest der Zeit durch eine höhere Entwicklungseffizienz auszugleichen. (Beachten Sie, ich habe die Vorteile von Qt weggelassen, von denen es auch viele gibt)

James Creasy
quelle
2
Der Qt3-zu-Qt4-Port war für die meisten Leute, die ich kenne, schwierig. Diese QML und ähnliche Dinge, die in den neueren Versionen eingeführt wurden, machen mir Sorgen, da dies möglicherweise erneut einen komplizierten Port bedeutet.
Vitor Py
10

Qt verwendet nicht die Standard-C ++ - Bibliothek , verfügt jedoch über einen eigenen QString, QVector, QMap, ...

Dies bedeutet, dass Sie eine wichtige Entwurfsentscheidung treffen müssen: Welche Teile der Anwendung verwenden QString und welche Teile verwenden std :: string?

Wenn Sie in einigen Teilen std :: string und in anderen Teilen QString verwenden, müssen Sie in den Grenzen zwischen QString und std :: string konvertieren.

Um diesen Aufwand zu vermeiden, können Sie QString in Ihrer gesamten Anwendung verwenden. Dies macht es jedoch viel schwieriger, Bibliotheken von Drittanbietern zu verwenden, die nicht auf Qt basieren, z. B. Boost.

(Beachten Sie, dass dies auch für std :: map vs QMap, std :: vector vs QVector usw. gilt.)

Die Entscheidung, welche Teile die Qt-Typen verwenden und welche Teile die STL verwenden, ist eine wichtige Entwurfsentscheidung mit erheblichen Auswirkungen. Und nur, weil Qt sich weigert, die Standard-C ++ - Bibliothek zu verwenden.

IMHO, diese Entscheidung könnte je nach Projekt in beide Richtungen gehen. Daher kann ich Ihre Frage nicht beantworten, welche Sie vermeiden sollten.

Sjoerd
quelle
1
Ich stimme zu, aber ich würde am Rande gehen und sagen, dass der QString (usw. usw.) auch eine der Stärken ist, da es so schön ist, mit ihnen zu arbeiten.
Johan
1
Es ist auch gar nicht so schwer, eine Bibliothek zu verwenden, die kein QString verwendet. Es gibt eine einfache Methode, um einen QString in einen std :: string zu konvertieren und umgekehrt. Nicht viel dazu.
@Glenn Nelson: Ja, heutzutage gibt es Konvertierungsfunktionen für QString. sehr nützlich und bequem! Insbesondere für QVector und QMap wird die Konvertierung jedoch mit einem Mehraufwand verbunden sein (und einfache Lösungen funktionieren beispielsweise für QVector <QString> nicht). Dieser Overhead sollte beim Entwurf berücksichtigt werden, um Leistungsprobleme auf der ganzen Linie zu vermeiden.
Sjoerd
3

Dies beantwortet die Frage nicht direkt, aber ich denke, es ist erwähnenswert: Der vielleicht "gefährlichste" Aspekt von Qt ist, dass Nokia mit MSoft ins Bett gegangen ist ...

Vektor
quelle
2
Aber sie haben Qt verlassen, um es zu tun.
Martin Beckett
1
Der Vollständigkeit halber - Der kommerzielle Teil von Qt gehört jetzt Digia, während Qt zu einem System der "offenen Regierungsführung" übergegangen ist, zu dem andere problemlos beitragen können. Es gibt auch die KDE Free Qt Foundation, die Qt vor Closed Source schützt.
Vishesh Handa
2

Kürzlich habe ich herausgefunden, dass ein QChar trotz seines Namens nicht einem Zeichen entspricht, sondern einer UTF-16-Codeeinheit. Wenn Sie also einen beliebigen Unicode-Text zeichenweise scannen möchten, müssen Sie Algorithmen hinzufügen, um mit hohen und niedrigen Ersatzzeichen umzugehen und Zeichen und dergleichen zu kombinieren.

Sebastian Negraszus
quelle