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
选项即可。
我修正了这个错字。感谢您的发现。 – 2010-05-27 11:23:05
感谢您的帮助,我通过在我的.pro文件中放置了'mac:LIBS + = -framework ApplicationServices'和我的.mm文件中的#import',从而能够链接到ApplicationServices。 –
2010-05-27 11:28:36