Отправка сообщения в центр уведомлений Mountain Lion с ядром Core

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

введите описание изображения здесь

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

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

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

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

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

3

Решение

Вы можете легко интегрировать код 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];
}
5

Другие решения

Нет необходимости в родном коде. 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");

введите описание изображения здесь

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector