2012-03-15 17 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()を試してみて、フォールバックとしてバッファ1を使用することができます。

関連する問題