2013-02-06 26 views
12

我目前工作的一個大型項目,其中「邏輯」,在標準C實現++與所有字符串與std::wstring被處理和UI部分使用Qt來實現,因此一定QString(獎金的問題:這是真的嗎?)。的最佳方式:: wstring的到QString的

什麼是這兩個世界連接的最佳方式?

我知道我可以使用類似

std::wstring wideString; 
QString qtString = QString::fromStdWString(wideString); 

,但我不知道是否有與參與少打字更好的方式。一位用戶定義的操作員出現在我的腦海裏,但我沒有足夠的經驗來解決這個問題。

會很高興,如果有人能在正確的方向指向我。

+4

你有沒有讀過[QString,std :: wstring和內置的wchar_t](http://qt-project.org/wiki/toStdWStringAndBuiltInWchar)? –

+0

您已接受在一個方向只說明轉換的答案。這是你的問題嗎?那麼你應該修改標題,以免引起誤解(對於那些希望在另一方向找到關於轉換的答案的人)。 –

回答

14

它使用QString::fromStdWString(!!!)如果Qt的是完全相同的STL頭作爲項目編好主意。如果沒有 - 你可以獲得很多樂趣,捕捉一個錯誤。

如果不確保兩個STL頭是一樣的使用QString::fromWCharArray

std::wstring wideString; 
QString qtString = QString::fromWCharArray(wideString.c_str()); 

更新:回答到@juzzlin:
讓我們想象Qt的是建立與包含以下的STL std::wstring

class wstring { // I know, that there's no such class, but I'm shure you'll understand what I want to say 
    wchar_t * m_ptr; 
    size_t m_length; 
    ... 
}; 

,你必須包含STL以下std::wstring

class wstring { 
    wchar_t * m_ptr; 
    wchar_t * m_the_end; 
    ... 
}; 

如果你給你的std::wstring Qt的,它會解釋m_the_end指針作爲字符串的長度,並

你可以得到很多的樂趣,捕捉錯誤

+1

如果「完全相同」的STL頭文件不被使用會發生什麼?爲什麼QString :: fromWCharArray()更好的解決方案是這種情況? – juzzlin

+1

fromStdWString在qstring.h中被內聯,並且具有實現:''''返回fromWCharArray(s.data(),int(s.size()));'所以使用它是安全的。 – rmflow

+0

@rmflow是的,你是對的,但不能保證'wstring :: data'和'wstring :: size'也是內聯的。 – borisbn

0

也許做一個內聯函數QString toQString(std::wstring string),使其「少鍵入」 ......

但說實話......那不是花大力氣在所有它不時寫;)

洙長哉​​

2

我想定義的轉換,用戶就是你要找的內容,並從我所知,應該是這個樣子:

class foo 
{ 
public: 
    operator QString(std::wstring& ws) 
    { 
     return QString::fromStdWString(ws); 
    } 
}