Qtとlibnotify
Qtで通知を出すのはQSystemTrayicon::showMessage
でいいわけですが、見た目が非常にかっこ悪いです。
画像はWindows XP上で動作させているものですが、Linuxでもこのバルーン通知を使います。
本当に格好が悪いのでlibnotifyで通知を出すことにしました。
An error has occurred. Please try again later. |
NOTE
- 当たり前ですが、
libnotify
の開発パッケージがないとなにもできません。 - libglibmmも無いと
libnotify
をC++上で使えません。 - libnotifyを使えるようにqmakeに↓を書いておく必要があります。
1 2 |
CONFIG += link_pkgconfig PKGCONFIG += libnotify |
- signalsをundefしないとlibnotifyを使えません
1 2 |
#undef signals #include <libnotify/notify.h> |
- コールバック関数は↓みたいな感じにするだけの簡単な作業です。
1 2 3 4 5 6 |
void callbackFunction(NotifyNotification *notifyNotification, const char *action, gpointer data) { //something to do } |
- コールバック関数に渡すデータはgpointerにキャストしてからコールバック関数の中で元の型にキャストして戻します。
キャストにはreinterpret_cast
を使う必要があります。
複数のデータを渡すときは構造体で渡します。
1 2 3 4 5 6 7 8 9 10 |
void callback(NotifyNotification *notifyNotification, const char *action, gpointer data) { Q_UNUSED(notifyNotification); Q_UNUSED(action); QString *message = reinterpret_cast<QString *>(data); qDebug() << *message; } |
1 2 3 4 5 6 7 8 |
QString *data = new QString("Hello"); notify_notification_add_action(notify, "default", "Open", NotifyActionCallback(callback), reinterpret_cast<gpointer>(data), NULL); |
- アイコンはアイコンの名前またはアイコンの画像のパスを指定します。
画像のバイナリを突っ込まないこと。
1 2 3 |
NotifyNotification *notify = notify_notification_new("いい天気、いい天気", "今日もいい天気☆", "weather-clear"); |