Qt - Mischen von Qt und std :: C ++ Typen

7

Mehr eine benutzerdefinierte und Praxis-Frage, aber ist es als schlechte Form, oder stark zu empfehlen (wählen Sie Ihre Interpretation von Schlechtigkeit), die Verwendung von Qt-Bibliothekstypen und ähnliche Standard-C ++ - Typen in dem einen Programm zu mischen?

Ist es beispielsweise sehr ratsam, NUR QStrings für die Verwendung von Strings zu verwenden, oder mischt man häufig QString- und std :: string-Typen in der Quelldatei?

Ich habe etwas Code geerbt, der die Verwendung von QString und std :: string in der einen Datei enthält, und frage mich, ob ich alles in das eine oder das andere konvertieren soll.

    
Pete855217 06.11.2011, 12:01
quelle

5 Antworten

7

Ich denke, es kommt darauf an, "es kommt darauf an, was Sie tun." Sicherlich ist es einfacher, die Dinge als nur einen Typ zu halten. Es kann jedoch vorkommen, dass Sie std :: strings übergeben oder QStrings übergeben müssen und es möglicherweise leistungsmäßig besser ist, die Konvertierung nicht durchzuführen.

Beachten Sie auch, dass QStrings nicht mit denen von std: strings identisch sind. Berücksichtigen Sie dies bei der Konvertierung zwischen ihnen (oder wählen Sie nur einen bestimmten Typ).

    
Trenton Schulz 06.11.2011, 12:08
quelle
5

Überprüfen Sie diesen Blogeintrag , der STL mit QTL und std::string mit vergleicht QString .

Meine 2 Cent

Es hängt wirklich davon ab, was Sie tun. Allgemein wenn ich etwas codiere wo Qt nicht notwendig ist (zB eine Bibliothek) benutze ich immer STL . Auf der anderen Seite, wenn ich Code für eine GUI-Anwendung schreibe, verwende ich lieber QTL und QString über STL und std::string . Wenn ich diesen Code in eine Bibliothek integrieren möchte, die mit STL geschrieben wird, stelle ich überladene Funktionen bereit, die die Konvertierung von STL nach QTL und QString nach std::string vornehmen.

QStrings sind ein Muss Wenn Sie Ihre Anwendung seit der Verwendung von tr() und QLinguist macht es kinderleicht.

    
pnezis 06.11.2011 13:28
quelle
3

Im Allgemeinen bevorzuge ich die Verwendung von QString über std::string und Qt Containern (wie QList , ...) über std Containern in Code, der eng an das Qt Framework gekoppelt ist, und würde es auch nicht tun Sinn machen ohne es. In allen anderen Komponenten (wie Hilfsbibliotheken und dergleichen) bevorzuge ich aus Gründen der Flexibilität den Standard C ++ - Weg.

Aber ich denke, das ist eher eine subjektive Entscheidung, da die Typen normalerweise recht einfach voneinander zu konvertieren sind (und Qt-Container bieten auch standardkonforme Iteratoren). Obwohl in Qt-zentrischem Code die Qt-Container möglicherweise besser funktionieren, insbesondere zusammen mit Qt's Meta-Objekt und Typ-System.

    
Christian Rau 06.11.2011 12:12
quelle
3

QStrings und C ++ - Strings lösen unterschiedliche Probleme - der Hauptunterschied besteht darin, dass QStrings explizit mit locales / encodings umgehen, während std :: strings dies nicht tut.

Verwenden Sie QStrings also für alle von Benutzern eingegebenen Daten und alle Zeichenfolgen, die Ihren Nutzern angezeigt werden, oder dass Sie beim Konvertieren von Kodierungen Informationen verlieren und / oder die Internationalisierung Ihrer App in Zukunft erschweren.

Für alles, wo ich gerade ein Char * Äquivalent benötige, z.B. Da ich Daten aus einer Datenbank gelesen habe, in der locales / encodings nicht anwendbar sind, verwende ich std :: strings, da sie viel einfacher mit Nicht-Qt-Bibliotheken zu verwenden sind und Ihre Daten nicht durch Codierungskonvertierungen umgesetzt werden. Sie müssen sie jedoch explizit zum qt-Typ-System hinzufügen, um sie in signal / slot-Argumenten verwenden zu können, was einfach ist, sobald Sie wissen, wie.

Aber am Ende ist es ein Urteilsspruch - nur um Ihre Codebasis für Neulinge zugänglicher zu machen, ist es vielleicht besser, QString überall zu verwenden, oder einfach nur std :: string überall, wenn Sie QtCore in einem nicht GUI-App.

    
je4d 06.11.2011 12:24
quelle
1

Ich nehme an, es liegt an Ihnen, zu entscheiden. Beachten Sie, dass für die Konvertierung zwischen den beiden eine Kopie der Zeichenfolge erforderlich ist. Wenn also beide Konvertierungen erforderlich sind, ist die Leistung nicht gut: Lesen Sie beispielsweise QString::fromStdString und QString :: fromStdWString . Wenn Sie Qt verwenden, schätze ich, dass Sie möglicherweise nicht nur QString verwenden, und in diesem Fall erfordern die meisten Methoden der Qt-Klassen, dass Sie QString bereitstellen. Also, könnte schlecht für die Leistung und unangenehm zu schreiben sein.

Berücksichtigen Sie auch, dass std :: string leicht von Implementierung zu Implementierung variiert und std :: string copy-on-write möglicherweise eine andere Leistung zeigt.

    
Luca Carlon 06.11.2011 12:23
quelle

Tags und Links