【问题标题】:How to call Carbon function from Qt Creator project?如何从 Qt Creator 项目中调用 Carbon 函数?
【发布时间】:2011-04-29 01:03:49
【问题描述】:

我正在尝试在 Mac OS X 上的 Qt Creator 项目中使用 ChangeWindowAttributes() 函数。 但我无法构建项目。

我尝试过的:

#include <MacWindows.h>

结果(编译器):找不到文件

#include <Carbon/Carbon.h>

// Or the same:
#include </Developer/Headers/FlatCarbon/MacWindows.h>

结果(编译器):ChangeWindowAttributes 未在此范围内声明

#include <Carbon/Carbon.h>
extern OSStatus ChangeWindowAttributes (
   WindowRef window,
   WindowAttributes setTheseAttributes,
   WindowAttributes clearTheseAttributes
);

// And in *.pro file:
LIBS += -framework Carbon

结果(链接器):未定义符号 ChangeWindowAttributes( ...

我哪里错了?

根据谷歌,似乎每个人都已经知道如何包含它,所以任何地方都没有指南。也许这里有人也有指南的链接或其他什么?

【问题讨论】:

  • 尝试使用 " 而不是

标签: c++ qt macos


【解决方案1】:

默认情况下,QT Creator 在您的 Mac 的 CPU 架构中构建您的项目。这些库本身采用 x86 和 x86_64 通用二进制文件。这是如果您使用的是诺基亚的预构建 SDK。

如果您正在运行支持 64 位的 OS/Mac 组合,例如在新的 Intel Mac 上运行 10.6,它将在 x86_64 中构建它。您的代码仍然可以使用 Carbon 调用,但只有那些标记为 64 位兼容的调用。打开 MacWindows.h 并找到 ChangeWindowAttributes。你会在评论中看到:

 *  Availability:
 *    Mac OS X:         in version 10.0 and later in Carbon.framework [32-bit only]
 *    CarbonLib:        in CarbonLib 1.0 and later
 *    Non-Carbon CFM:   not available

如果您必须调用此(以及其他仅 32 位)函数,则必须强制 Creator 以 32 位 (x86) 构建它。将这些行添加到您的 .pro 文件中:

CONFIG -= x86_64
CONFIG += x86

清除所有并重建。

【讨论】:

  • 谢谢。这真的很重要。但是用 Qt 的 QWidget::winId() 替代 64 位下的 ChangeWindowAttributes 是什么?
  • 我不知道。可能没有。苹果几乎只是让 Carbon 流血致死,甚至没有假装他们在乎。你也许可以在 Cocoa 中找到带有 Obj-C 接口的东西。但问题是,你为什么要在 Qt 项目中这样做?如果你有一些特定的需求,你应该发布一个关于如何用 Qt 完成它的问题。
  • 你是对的。我已经发布了原始问题:stackoverflow.com/q/5823700/698843 实际上,我们认为它在 Qt 中无法解决,但希望我们错了。
猜你喜欢
  • 2021-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多