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