Я занимаюсь разработкой демона с помощью Qt и хочу отправить сообщения в центр уведомлений Mountain Lion: —
Кажется, Qt не поддерживает это, что неудивительно, поскольку он не кроссплатформенный.
Если бы я использовал Какао, похоже, я бы использовал класс NSUserNotificationCenter с NSUserNotification.
До сих пор всякий раз, когда я видел Базовый класс, всегда было совпадение Основной фонд класс, но кажется, что нет CFUserNotificationCenter, но есть CFUserNotification.
Итак, я прав, что NSNotificationCenter — то, что Какао использует для этого, и возможно ли отправлять сообщения в Центр уведомлений без Какао?
Если это возможно, может кто-нибудь опубликовать пример кода на C или C ++ или хотя бы указать, какие функции использовать?
Вы можете легко интегрировать код Qt / C ++ с Cocoa / Objective-C. XCode поддерживает Objective-C ++, который представляет собой смесь C ++ и Objective-C. Эти файлы будут иметь .мм и добавлены в ваш проект 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];
}
Нет необходимости в родном коде. 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");