使用Core基金会向Mountain Lion通知中心发送消息

The*_*ght 3 c++ macos notifications qt core-foundation

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

在此输入图像描述

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

如果我使用的是Cocoa,看起来我会将NSUserNotificationCenter类与NSUserNotification一起使用.

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

那么,我是否正确,NSNotificationCenter是Cocoa用于此目的,是否可以在没有Cocoa的情况下向Notification Center发送消息?

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

Lin*_*lle 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
Run Code Online (Sandbox Code Playgroud)

foo.h中

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

#endif
Run Code Online (Sandbox Code Playgroud)

Foo.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];
}
Run Code Online (Sandbox Code Playgroud)