2013-09-19 2 views
3

Я разрабатываю демон с Qt, и я хотел, чтобы отправлять сообщения в центр уведомлений Mountain Lion: -Отправка сообщения уведомления центра Mountain Lion с ядра фонда

enter image description here

Qt, кажется, не хватает поддержки для этого, что неудивительно, поскольку это не кросс-платформенный.

Если бы я использовал Cocoa, похоже, что я бы использовал класс NSUserNotificationCenter с NSUserNotification.

До сих пор, когда я видел класс Foundation, там всегда был соответствие Основного фонда класса, но это, кажется, что нет CFUserNotificationCenter, но есть CFUserNotification.

Итак, я прав, что NSNotificationCenter - это то, что Cocoa использует для этого, и можно ли отправлять сообщения в Центр уведомлений без какао?

Если возможно, пожалуйста, кто-нибудь может отправить пример кода на C или C++ или, по крайней мере, указать, какие функции использовать?

ответ

5

Вы можете легко integrate Qt/C++ code with Cocoa/Objective-C. XCode поддерживает Objective-C++, который представляет собой сочетание C++ и Objective-C. Эти файлы будут иметь расширение .mm и будут добавлены в ваш проект QMake с использованием переменной OBJECTIVE_SOURCES (к сожалению, это не официальная документация 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 

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]; 
} 
+1

Вау, это было легко. Я думал, что смешивание Objective C с Qt будет просто простным из XCode, но Qt Creator справляется с этим так же хорошо. Благодарю. – TheDarkKnight

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"); 

enter image description here

+0

жаль, что это не то же самое. Вопрос касается размещения сообщений в Центре уведомлений, который может быть выполнен из любого приложения, а не только с иконкой «Системный лоток». Эти сообщения разные. – TheDarkKnight

+0

Я не понимаю различия. Эти сообщения отображаются в Центре уведомлений для меня, как и в любом другом приложении. – njahnke

+0

они могут появиться в Центре уведомлений, но для вашего кода требуется QSystemTrayIcon, поэтому он работает только с этим. – TheDarkKnight

 Смежные вопросы

  • Нет связанных вопросов^_^