OSD сообщения средствами Qt4?

Есть замечательный проект XOSD (ignavus.net/software.html). Удобен в использовании, прост, нересурсоемок и вообще был бы идеальным, если бы не одно но — он работает только под Linux. Для меня то это не проблема, но куча целевой аудитории пользуется другими ОС. Как сделать точно такое же средствами Qt4? Мне необходимо абсолютно то же самое, но кроссплатформенное.
  • Вопрос задан
  • 2939 просмотров
Пригласить эксперта
Ответы на вопрос 4
skobkin
@skobkin
Гентушник, разработчик на PHP и Symfony.
Однажды видел в винде что-то, что не перехватывает мышь. Однако, по большему счету все реализации уведомлений, что я где-либо видел под виндой ловят её.
Как вариант — использовать выборочно разные типы уведомлений в зависимости от платформы. Так многие делают.
Ответ написан
wholeman
@wholeman
Атрибут окна Qt::WA_TransparentForMouseEvents не помогает?
Ответ написан
@Robotex Автор вопроса
Вот что написал, устраивает все, кроме того, что мышь перехватывается:


#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QKeyEvent>
#include <QGraphicsDropShadowEffect>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::Window
                         | Qt::WindowStaysOnTopHint
                         | Qt::X11BypassWindowManagerHint
                         | Qt::FramelessWindowHint);

    setAttribute(Qt::WA_NoSystemBackground, true);
    setAttribute(Qt::WA_TranslucentBackground, true);
    setAttribute(Qt::WA_TransparentForMouseEvents, true);

    QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(this);
    effect->setBlurRadius(0);
    effect->setColor(QColor("#000000"));
    effect->setOffset(1,1);
    ui->label->setGraphicsEffect(effect);
    QString fonttemplate = tr("<font color='%1'>%2</font>");
    ui->label->setText(fonttemplate.arg("#00FF00", "OSD Message"));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
   if (event->key() == Qt::Key_Escape) {
       qApp->quit();
   }
}

void MainWindow::mousePressEvent ( QMouseEvent * event )
{
    if( event->button())
    {
        qApp->quit();
    }
}


Но ведь есть же способ какой-то. Как мониторы рисуют поверх всех окон, когда кнопку настройки нажмешь?
Ответ написан
demogorgorn
@demogorgorn
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы