Qt 中的 Mac OS X 链接器错误;CoreGraphics 和 CGWindowListCreate

Jak*_*les 4 c++ macos qt objective-c objective-c++

这是我的 .mm 文件

#include "windowmanagerutils.h"

#ifdef Q_OS_MAC
#import </System/Library/Frameworks/ApplicationServices.framework/Frameworks/CoreGraphics.framework/Headers/CGWindow.h>

QRect WindowManagerUtils::getWindowRect(WId windowId)
{
    CFArrayRef windows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
    return QRect();
}

QRect WindowManagerUtils::getClientRect(WId windowId)
{
    return QRect();
}

QString WindowManagerUtils::getWindowText(WId windowId)
{
    return QString();
}

WId WindowManagerUtils::rootWindow()
{
    QApplication::desktop()->winId();
}

WId WindowManagerUtils::windowFromPoint(const QPoint &p, WId parent, bool(*filterFunction)(WId))
{
    return NULL;
}

void WindowManagerUtils::setTopMostCarbon(const QWidget *const window, bool topMost)
{
    if (!window)
    {
        return;
    }

    // Find a Cocoa equivalent for this Carbon function
    // [DllImport("/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon")]
    // OSStatus ret = HIViewSetZOrder(this->winId(), kHIViewZOrderAbove, NULL);
}
#endif
Run Code Online (Sandbox Code Playgroud)

链接器告诉我“_CGWindowListCreate”未定义。我必须链接到哪些库?Apple 的文档对于告知要包含或链接到的内容的帮助不大,就像 MSDN 那样。而且我不能只是这样做#import <CGWindow.h>,我必须指定它的绝对路径......有什么办法吗?

Lau*_*ble 6

CGWindowListCreate函数是Quartz Window Services一部分。相应的框架位于.ApplicationServices/System/Library/Frameworks/

因此,您只需包含<ApplicationServices/ApplicationServices.h>在文件顶部并链接到该-framework ApplicationServices选项即可。