クロスプラットフォームのC++ヘッダーファイル。プラットフォームごとに別々のC++ファイル:windows、linux、mac。列挙するウィンドウのプラットフォーム固有の実装を扱います。CFStringRefをQStringに変換する
(Mac側):CFStringRefが設定されています。ヘッダーファイルはQStringオブジェクトを定義します。 CFStringRefの内容をQStringに渡す必要があります。
これはどのように達成できますか?
クロスプラットフォームのC++ヘッダーファイル。プラットフォームごとに別々のC++ファイル:windows、linux、mac。列挙するウィンドウのプラットフォーム固有の実装を扱います。CFStringRefをQStringに変換する
(Mac側):CFStringRefが設定されています。ヘッダーファイルはQStringオブジェクトを定義します。 CFStringRefの内容をQStringに渡す必要があります。
これはどのように達成できますか?
これは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;
}
私はそれを試していないが、私はこのような何かをするだろう:
QVector<UniChar> uniChars(CFStringGetLength(cfStr));
CFStringGetCharacters(cfStr, CFRangeMake(0, CFStringGetLength(cfStr), uniChars.data());
QString qString = QString::fromUtf16(uniChars.data(), uniChars.size());
はのUniCharバッファの割り当てを回避するには、まずCFStringGetCharactersPtr()
を試してみて、フォールバックとしてバッファ1を使用することができます。