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

问题描述:

这是我.mm文件Qt中的Mac OS X链接器错误; CoreGraphics在与CGWindowListCreate

#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>,我不得不指定它的绝对路径...任何方式呢?

CGWindowListCreate功能是Quartz Window Services的一部分。相应的框架是ApplicationServices,它位于/System/Library/Frameworks/之下。

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

+0

我修正了这个错字。感谢您的发现。 – 2010-05-27 11:23:05

+0

感谢您的帮助,我通过在我的.pro文件中放置了'mac:LIBS + = -framework ApplicationServices'和我的.mm文件中的#import ',从而能够链接到ApplicationServices。 – 2010-05-27 11:28:36