3

我正在使用 Qt 开发一个守护进程,并且想向 Mountain Lion 通知中心发送消息:-

在此处输入图像描述

Qt 似乎缺乏对此的支持,这并不奇怪,因为它不是跨平台的。

如果我使用的是 Cocoa,看起来我会使用带有 NSUserNotification 的 NSUserNotificationCenter 类。

到目前为止,每当我看到一个Foundation 类时,总是有一个匹配的Core Foundation类,但似乎没有 CFUserNotificationCenter,但有一个 CFUserNotification。

那么,我认为 NSNotificationCenter 是 Cocoa 的用途,是否可以在没有 Cocoa 的情况下向通知中心发送消息?

如果可能的话,请有人可以用 C 或 C++ 发布代码示例,或者至少指出要使用哪些函数?

4

2 回答 2

6

您可以轻松地将 Qt/C++ 代码与 Cocoa/Objective-C 集成。XCode 支持 Objective-C++,它是 C++ 和 Objective-C 的混合体。这些文件将具有.mm扩展名,并使用OBJECTIVE_SOURCES变量添加到您的 QMake 项目中(不幸的是,官方 QMake 文档中没有)。因此,只需将NSUserNotification代码直接添加到 C++ 类中即可。

QMake 项目文件

HEADERS += Foo.h
OBJECTIVE_SOURCES += Foo.mm
LIBS += -framework Foundation
INCLUDEPATH += /System/Library/Frameworks/Foundation.framework/Versions/C/Headers

Foo.h

#ifndef FOO_H
#define FOO_H
class Foo {
public:
  void test();
};

#endif

福.mm

#include "foo.h"
#include <NSUserNotification.h>

void Foo::test() {
  NSUserNotification *userNotification = [[[NSUserNotification alloc] init] autorelease];
  userNotification.title = @"My Great Title";
  userNotification.informativeText = @"Blah Blah Blah";

  [[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification];
}
于 2013-09-19T17:09:55.853 回答
1

不需要本机代码。QSystemTrayIcon::showMessage()在 10.9.5(Qt 5.3.2)中按预期工作。

QSystemTrayIcon tray_icon;
auto menu = new QMenu;
tray_icon.setContextMenu(menu);
tray_icon.show();
tray_icon.showMessage("Test message", "Test body");

在此处输入图像描述

于 2014-10-16T17:05:08.507 回答