跨平台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()
第一,并使用一个缓冲的回落。