Ошибка компоновщика Mac OS X в Qt; CoreGraphics & CGWindowListCreate - PullRequest
1 голос
/ 27 мая 2010

Вот мой .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

Компоновщик говорит мне, что _CGWindowListCreate не определено. На какие библиотеки я должен ссылаться? Документация Apple не очень полезна для того, чтобы указывать, что включать или ссылаться на нее, как MSDN. Кроме того, я не мог просто сделать #import <CGWindow.h>, я должен был указать абсолютный путь к нему ... каким-то образом?

1 Ответ

2 голосов
/ 27 мая 2010

Функция CGWindowListCreate является частью Службы кварцевых окон . Соответствующий каркас - ApplicationServices, который расположен под /System/Library/Frameworks/.

Итак, вы можете просто включить <ApplicationServices/ApplicationServices.h> вверху файла и связать с опцией -framework ApplicationServices.

...