跨平臺C++頭文件。爲每個平臺分開C++文件:windows,linux,mac。處理枚舉窗口的平臺特定實現。將CFStringRef轉換爲QString
在mac端:我有一個CFStringRef填充。頭文件定義了一個QString對象。我需要將CFStringRef的內容傳遞給QString。
如何才能實現這一目標?
跨平臺C++頭文件。爲每個平臺分開C++文件:windows,linux,mac。處理枚舉窗口的平臺特定實現。將CFStringRef轉換爲QString
在mac端:我有一個CFStringRef填充。頭文件定義了一個QString對象。我需要將CFStringRef的內容傳遞給QString。
如何才能實現這一目標?
這是通過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;
}
我沒有嘗試,但我會做這樣的事情:
QVector<UniChar> uniChars(CFStringGetLength(cfStr));
CFStringGetCharacters(cfStr, CFRangeMake(0, CFStringGetLength(cfStr), uniChars.data());
QString qString = QString::fromUtf16(uniChars.data(), uniChars.size());
爲了避免UNICHAR緩衝的分配,你可以嘗試CFStringGetCharactersPtr()
第一,並使用一個緩衝的回落。