将CFStringRef转换为QString

时间:2012-03-15 17:36:27

标签: macos qt cfstring

跨平台c ++头文件。为每个平台分离c ++文件:windows,linux,mac。处理枚举窗口的平台特定实现。

mac端的

:我填充了CFStringRef。头文件定义了一个QString对象。我需要将CFStringRef的内容传递给QString。

如何实现这一目标?

3 个答案:

答案 0 :(得分:3)

这是Qt内部使用的静态函数(来自src / corelib / kernel / 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;
}

答案 1 :(得分:2)

您可以使用fromCFString()类中包含的QString方法:

CFStringRef str = CFSTR("Hello World!");
QString convertedStr = QString::fromCFString(str);

答案 2 :(得分:0)

我没试过,但我会做这样的事情:

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

为了避免分配UniChar缓冲区,您可以先尝试CFStringGetCharactersPtr()并使用缓冲区作为后退。