2012-03-15 1 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() первый и использовать буфер один, как падение назад.

 Смежные вопросы

  • Нет связанных вопросов^_^