Обо мне

Моя фотография
Индивид, которому нравится слушать качественную музыку, а потом делиться впечатлениями с другими!

пятница, 1 апреля 2011 г.

[Qt] Создание красивого всплывающего окошка OSD

Для своей программки LinForismatic, отображающей цитаты на рабочем столе, понадобилось выводить красивые всплывающие окошки содержащие произвольный текст и, по мере необходимости, небольшое изображение-иконку.

Под линуксом с этим проблем нет - libnotify поможет всем. Однако хотелось кросс-платформенного решения, под определение которого подпадал widget для вывода OSD из состава музыкального проигрывателя Clementine.

Немного порывшись в исходном коде проигрывателя нужные классы были найдены. Единственное чего не хватало в реализации, так это установление произвольного шрифта - что я и добавил, собственно в этот widget.

В итоге получаем:


Если кому интересно, то я выложил отдельный архив:
http://dl.dropbox.com/u/6896945/prettyosd.zip

Использовать можно следующим образом:

osd = new OSDPretty(OSDPretty::Mode_Popup);
osd->set_fading_enabled(true);
QFont font("Tahoma",11);
osd->setOsdFont(font);
osd->set_popup_duration(20000);
osd->SetMessage(name,text,QImage());
osd->show();


5 комментариев:

  1. А можно сделать так, чтобы он не реагировал на мышь? Т.е. чтобы объекты позади него реагировали, а он сам нет?

    ОтветитьУдалить
  2. Имеется ввиду, чтобы при наведении на всплываюшее окошко оно не реагировало (не становилось прозрачней) или чтобы при нажатии в области окошка реагировал элемент, возможно, чужого окна?

    Если первое, то

    void OSDPretty::enterEvent(QEvent *)
    void OSDPretty::leaveEvent(QEvent *)

    Если, второе, то честно говоря так сразу и затрудняюсь ответить

    ОтветитьУдалить
  3. Огромное человеческое спасибо

    ОтветитьУдалить
  4. Спасибо большое) Очень не охото было писать для своего плеера уведомления) А Системные не красивые.

    ОтветитьУдалить