1

クロス プラットフォームの C++ ヘッダー ファイル。プラットフォームごとに個別の c++ ファイル: windows、linux、mac。列挙ウィンドウのプラットフォーム固有の実装を扱います。

Mac 側: CFStringRef が設定されています。ヘッダー ファイルは QString オブジェクトを定義します。CFStringRef の内容を QString に渡す必要があります。

これはどのように達成できますか?

4

3 に答える 3

5

これは 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()を使用します。

于 2012-03-15T19:31:00.510 に答える
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 をフォールバックとして使用できます。

于 2012-03-15T18:44:27.890 に答える