今日はUbuntuユーザーにはお馴染みのNotify(?)をQtで表示してみようかと思います。
(この記事で作ったプロジェクトは IzumiSy/libnotify-on-Qtです)
Ubuntuユーザー馴染みのNotifyメッセージ |
知っている方も多いと思いますが、QtにはQSystemTrayIconというクラスがあります。
一応これを使ってもメッセージのバルーンを表示することは出来るのですが、どうも環境に依存しないタイプのポップアップしか出せないらしく、Ubuntuにおいても下のように吹き出し型のものになってしまいます。
QSystemTrayIconをWindowsで用いた例。 Ubuntuにおいても同様のスタイルで表示される。 |
ということで、上のほうのカッコいいやつ(Ubuntu独自のバルーン)をさっそくQtで表示させていきます。
STEP1. libnotify-devをインストールする
実は意外と多い最初のトラブルがこれと関連している。
導入されないとnotify.hが見つからなくてイライラする
STEP3. pkg-configのサポート
# To support for pkg-config CONFIG += link_pkgconfig PKGCONFIG += libnotify
これをproファイルのどこか適当に追加しておく
ここまでで一応必要な材料はすべて揃ったのだが、このままビルドすると、Qtによって定義されている signals という定数と、Gtkによって定義される変数の名前との間に定義衝突が発生し、ビルドエラーを引き起こす。ということで、下記の情報を参考に、然るべき場所にて signals を定義破棄する必要がある
How to prevent symbol collisions between GTK+ and Qt - Nokia Developer
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <qmainwindow>
// To prevent prevent symbol collisions between GTK+ and Qt
#undef signals
#include <libnotify⁄notify.h>
namespace Ui {
class MainWindow;
}
libnotify/notify.h をインクルードし、適切な箇所に表示に必要なコードを書く。
関数について詳しくは検索のこと。
関数について詳しくは検索のこと。
void MainWindow::on_pushButton_clicked()
{
notify_init("Hello World");
NotifyNotification *hello =
notify_notification_new("Hello world",
"This is an example notification.",
"dialog-information");
notify_notification_show(hello, NULL);
}
やったね!表示されたよ! |