【问题标题】:Programming with Qt creator and Cocoa ( copying the selected text from the current application)使用 Qt creator 和 Cocoa 编程(从当前应用程序复制选定的文本)
【发布时间】:2012-04-03 05:21:18
【问题描述】:

我想知道是否有办法在 Qt 应用程序中使用 Cocoa API。

我已经使用 Windows API 从活动应用程序中获取选定的文本。 我想对 mac os 做同样的事情。 我试图用 xCode 制作一个简单的“hello world”应用程序 C++,包括 <Cocoa/Cocoa.h>,但它没有像我一样工作。 有没有办法让这个“hello word”应用程序用 Cocoa 构建?

如果可能的话,我可以使用 Cocoa API 从活动窗口中获取选定的文本吗?

编辑:

好的,所以我成功地使用 Cocoa.h 构建了一些东西,感谢这个线程:How to mix Qt, C++ and Obj-C/Cocoa

对于选择问题,您可以查看我发布的答案,告诉您如何操作。

【问题讨论】:

  • 我使用 Qt 和 Cocoa 没有任何问题。只需创建 Qt 应用程序并将 obj-c 文件添加到您的项目中
  • 我不确定我理解你的意思。我在 .pro 文件中尝试了 #include 和 mac: LIBS += -framework Cocoa。但确切地说,我得到了 9689 错误......而且我很困惑,当我运行一个空的 Qt 应用程序时,它会打开一个 x11 框架,这正常吗?我以为 Mac OS 不再使用 x11。
  • 如果你想在 Cocoa 中使用 C++,你必须使用 Objective-C++。您的实现文件必须使用 .mm 文件扩展名。我对 Qt 知之甚少,所以对此我无能为力。
  • Qt 在 OS X 下不使用 X11,除非在编译时对其进行配置。几年前我只在 macports 和 KDE 3 的组合中看到过。

标签: c++ cocoa qt


【解决方案1】:

对于那些可能感兴趣的人:我找到了一种获取当前选定文本的方法。

只需模拟 cmd + c :

感谢thread,我更改了代码以获得由整数 8 表示的“c”键(在 NSEvent.h 中找到),所以这里是代码:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef saveCommandDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)8, YES);
CGEventSetFlags(saveCommandDown, kCGEventFlagMaskCommand);
CGEventRef saveCommandUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)8, NO);

CGEventPost(kCGAnnotatedSessionEventTap, saveCommandDown);
CGEventPost(kCGAnnotatedSessionEventTap, saveCommandUp);

CFRelease(saveCommandUp);
CFRelease(saveCommandDown);
CFRelease(source);

现在您只需从 Qt 访问剪贴板即可获得选择。 (如果问,我可以把代码做到这一点)

无论如何,感谢 stackoverflow 社区 ;)

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 2011-09-08
    • 2013-08-22
    • 2014-05-12
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多