Сведения о вопросе

profi

08:30, 6th August, 2020

Теги

Qt    

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

Просмотров: 311   Ответов: 4

Есть замечательный проект XOSD (ignavus.net/software.html). Удобен в использовании, прост, нересурсоемок и вообще был бы идеальным, если бы не одно но — он работает только под Linux. Для меня то это не проблема, но куча целевой аудитории пользуется другими ОС. Как сделать точно такое же средствами Qt4? Мне необходимо абсолютно то же самое, но кроссплатформенное.



  Сведения об ответе

darknet

03:24, 19th August, 2020

Однажды видел в винде что-то, что не перехватывает мышь. Однако, по большему счету все реализации уведомлений, что я где-либо видел под виндой ловят её.
Как вариант — использовать выборочно разные типы уведомлений в зависимости от платформы. Так многие делают.


  Сведения об ответе

VCe znayu

05:06, 6th August, 2020

Атрибут окна Qt::WA_TransparentForMouseEvents не помогает?


  Сведения об ответе

прога

11:42, 27th August, 2020

Вот что написал, устраивает все, кроме того, что мышь перехватывается:



#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();

    }

}



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


  Сведения об ответе

LIZA

10:03, 20th August, 2020

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться