2012-03-15 139 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()第一,并使用一个缓冲的回落。