Convert CFStringRef to QString

2021-10-28 15:07:49  阅读 1325 次 评论 0 条

在用QxtGlobalShortcut 时编译报错

"QCFString::toQString(__CFString const*)", referenced from:
      QxtWindowSystem::windowTitle(unsigned long long) in qxtwindowsystem_mac.o

解决方法,搬个砖

from https://stackoverflow.com/questions/9725113/convert-cfstringref-to-qstring

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;
}

将源码中代码改为

QString QxtWindowSystem::windowTitle(WId window)
{
    CGSValue windowTitle;
    CGError err((CGError)noErr);
    static CGSConnection connection = _CGSDefaultConnection();

    // This code is so dirty I had to wash my hands after writing it.

    // most of CoreGraphics private definitions ask for CGSValue as key but since
    // converting strings to/from CGSValue was dropped in 10.5, I use CFString, which
    // apparently also works.

    // FIXME: Not public API function. Can't compile with OS X 10.8
    // err = CGSGetWindowProperty(connection, window, (CGSValue)CFSTR("kCGSWindowTitle"), &windowTitle);
    if (err != noErr) return QString();

    CFStringRef str = (CFStringRef)windowTitle;
    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;

    // this is UTF8 encoded
    //return QCFString::toQString((CFStringRef)windowTitle);
}




本文地址:http://www.bloguan.com/?id=568
版权声明:本文为原创文章,版权归 博观网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?