크로스 플랫폼 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()
을 시도하고 다시 가을로 버퍼를 사용할 수 있습니다.