2012-03-15 5 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()을 시도하고 다시 가을로 버퍼를 사용할 수 있습니다.