2012-03-15 123 views
1

跨平臺C++頭文件。爲每個平臺分開C++文件:windows,linux,mac。處理枚舉窗口的平臺特定實現。將CFStringRef轉換爲QString

在mac端:我有一個CFStringRef填充。頭文件定義了一個QString對象。我需要將CFStringRef的內容傳遞給QString。

如何才能實現這一目標?

回答

3

這是通過QT(從SRC/corelib的/內核/ qcore_mac.cpp)內部使用的靜態函數:

QString QCFString::toQString(CFStringRef str) 
{ 
    if (!str) 
     return QString(); 

    CFIndex length = CFStringGetLength(str); 
    if (length == 0) 
     return QString(); 

    QString string(length, Qt::Uninitialized); 
    CFStringGetCharacters(str, CFRangeMake(0, length), reinterpret_cast<UniChar *> 
     (const_cast<QChar *>(string.unicode()))); 
    return string; 
} 
0

我沒有嘗試,但我會做這樣的事情:

QVector<UniChar> uniChars(CFStringGetLength(cfStr)); 
CFStringGetCharacters(cfStr, CFRangeMake(0, CFStringGetLength(cfStr), uniChars.data()); 
QString qString = QString::fromUtf16(uniChars.data(), uniChars.size()); 

爲了避免UNICHAR緩衝的分配,你可以嘗試CFStringGetCharactersPtr()第一,並使用一個緩衝的回落。