代码之家  ›  专栏  ›  技术社区  ›  TheDarkKnight

与Core基金会一起向Mountain Lion通知中心发送消息

  •  3
  • TheDarkKnight  · 技术社区  · 11 年前

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

    enter image description here

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

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

    到目前为止,每当我看到 基础等级 ,一直都有匹配 核心基础 类,但似乎没有CFUserNotificationCenter,但有CFUserNotification。

    那么,我说得对吗,NSNotificationCenter就是Cocoa用来做这件事的,在没有Cocoa的情况下,是否可以向通知中心发送消息?

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

    2 回复  |  直到 11 年前
        1
  •  6
  •   Community Eugene Mayevski 'Callback    7 年前

    你可以很容易地 integrate Qt/C++ code with Cocoa/Objective-C .XCode支持Objective-C++,它是C++和Objective-C的混合。这些文件将具有 .毫米 扩展,并使用 OBJECTIVE_SOURCES 变量(不幸的是,它不在QMake官方文档中)。所以只需添加 NSUserNotification 将代码直接编译到C++类中。

    Q制作项目文件

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

    食物

    #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];
    }
    
        2
  •  1
  •   njahnke    10 年前

    不需要本机代码。 QSystemTrayIcon::showMessage() 在10.9.5(问题5.3.2)中,我的工作符合预期。

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

    enter image description here