Я реализовал UserNotificationAlert, используя NSUserNotification и NSUserNotificationCenter в qt. Я написал код для принятия мер при нажатии кнопки actionButton, но, к сожалению, он не выполняется. У меня есть следующий код.
XYZ.h
namespace ABC {
void sendUserAlert(const QString &title, const QString &subTitle, const QString &actionButtonTitle, const QString &otherButtonTitle);
}
XYZ.mm
namespace ABC {
void sendUserAlert(const QString &title, const QString &subTitle, const QString &actionButtonTitle, const QString &otherButtonTitle)
{
@autoreleasepool {
NSUserNotification *notification = [[NSUserNotification alloc] init];
NSUserNotificationCenter *center = [NSUserNotificationCenter defaultUserNotificationCenter];
[notification setTitle: title.toNSString()];
if( !subTitle.isEmpty() ) {
[notification setSubtitle: subTitle.toNSString()];
}
if( !actionButtonTitle.isEmpty()) {
[notification setActionButtonTitle: actionButtonTitle.toNSString()];
}
if ( !otherButtonTitle.isEmpty()) {
[notification setOtherButtonTitle: otherButtonTitle.toNSString()];
}
[center deliverNotification:notification];
}
}
}
Delegate.mm
@interface HPObserver : NSObject<NSUserNotificationCenterDelegate>
- (id) init;
- (void) dealloc;
- (void) applicationDidFinishLaunching: (NSNotification *)aNotification;
@end
@implementation HPObserver
- (id) init
{
self = [super init];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(applicationDidFinishLaunching:)
name: NSApplicationDidFinishLaunchingNotification
object: NSApp];
return self;
}
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
- (void) applicationDidFinishLaunching:(NSNotification *)aNotification
{
@autoreleasepool {
NSUserNotification *notification = [[aNotification userInfo] objectForKey:NSApplicationLaunchUserNotificationKey];
if (notification.activationType == NSUserNotificationActivationTypeActionButtonClicked) {
NSlog(@"Hello World");
}
}
}
main.cpp
using namespace ABC;
int main(int argc, char **argv)
{
QString title = QObject::tr("Do you want to close the window");
QString actionButtonTitle = QObject::tr("Yes");
QString otherButtonTitle = QObject::tr("No");
ABC::sendUserAlert(title,subTitle,actionButtonTitle,otherButtonTitle);
}
Отображается уведомление пользователя, но когда я нажимаю кнопку «Да», никаких действий не происходит. Я думаю, что мне не хватает связать делегата с основной функцией, но я не уверен, как это сделать. Пожалуйста, помогите мне разобраться с этой проблемой.
Задача ещё не решена.
Других решений пока нет …