2011-11-06 104 views
7

更多的定製和實踐問題,但它被認爲是糟糕的形式,或高度不可取(選擇你的解釋不好)混合使用Qt庫類型和類似的標準C++類型在一個程序中?Qt - 混合Qt和std :: C++類型

例如,堅持只使用QStrings用於字符串使用還是人們經常在源文件中混合使用QString和std :: string類型?

我已經繼承了一些代碼,包括在一個文件中使用QString和std :: string,並且想知道是否將所有內容都轉換爲一個或另一個。

回答

7

我認爲這真的歸結爲「這取決於你在做什麼」。當然,更容易保持只有一種類型。然而,有時您需要傳遞std :: strings或傳遞QStrings,並且不進行轉換可能會更好地提高性能。

另請注意,QStrings與std:strings不同。因此,在它們之間進行轉換時(或選擇僅使用某種類型)請記住這一點。

3

一般來說,我更喜歡使用QString超過std::string和Qt容器(如QList,...)在std容器中的代碼,是緊耦合到Qt框架,反正沒有它,就沒有意義。在所有其他組件(如輔助庫等)中,爲了靈活性,我更喜歡使用標準的C++方式。

但我認爲這是更主觀的決定,因爲類型通常很容易相互轉換(而Qt容器也提供標準的一致性迭代器)。雖然在Qt高度集中的代碼中,Qt容器可能會更好,尤其是與Qt的元對象和類型系統一起使用。

1

我想這是由你來決定的。不管怎麼說,在兩者之間進行轉換需要一個字符串的副本,所以如果兩者都需要轉換,那麼它的性能不好:例如QString::fromStdStringQString::fromStdWString。如果你使用Qt,我想你可能不僅僅使用QString,在這種情況下,大多數Qt類的方法都要求你提供QString。所以,寫作可能會對性能造成不利影響。

同時考慮到std :: string從實現到實現略有不同,std :: string copy-on-write可能會顯示不同的性能。

+0

您的鏈接已損壞。 –

3

QStrings和C++字符串解決了不同的問題 - 主要區別在於QStrings明確地處理locales/encodings,而std :: strings不處理。

因此,對用戶輸入的所有數據以及要顯示給用戶的所有字符串使用QStrings,否則可能會丟失編碼轉換中的信息和/或使將來國際化應用程序變得更加困難。

對於任何我只需要char *等價物的地方,例如保持數據從地區/編碼不適用的數據庫中讀取,我使用std :: strings,因爲它們非Qt庫更容易使用,並且數據不會通過任何編碼轉換。 但是,你必須明確地將它們添加到qt類型系統中,以便能夠在信號/插槽參數中使用它們,一旦知道如何,這很容易。

但最後它是一個判斷調用 - 只是爲了讓你的代碼庫更容易被新手訪問,如果你使用的是非QtCore,那麼在任何地方使用QString或者可能只是std :: string都可能更好-gui應用程序

5

檢查此blog post比較STL與QTL和std::stringQString

我的2美分

這真的取決於你在做什麼。一般來說,當我編碼Qt是不必要的東西(例如庫)時,我總是使用STL。另一方面,如果我正在爲GUI應用程序編寫代碼,我傾向於使用QTLQString而不是STLstd::string。如果我想將此代碼與使用STL編寫的庫集成在一起,我提供了過載的函數,可將其從STL轉換爲QTLQStringstd::string

QStrings是必須的如果您想本地化您的應用程序,因爲使用tr()QLinguist使它變得非常簡單。