Qt5, прозрачное окно и события колеса

У меня есть простейшее приложение для тестирования:

TransWidget.cpp:

TransWidget::TransWidget(QWidget *parent) :
    QWidget(parent, Qt::Window | Qt::FramelessWindowHint)
{
    setAttribute(Qt::WA_ShowWithoutActivating);
    setAttribute(Qt::WA_TransparentForMouseEvents);
    setAttribute(Qt::WA_TranslucentBackground);
}

void TransWidget::paintEvent(QPaintEvent *)
{
    // some code to mark the presence of the window
}

void TransWidget::wheelEvent(QWheelEvent * ev)
{
    ev->ignore(); // keeps getting here no matter what I try!
}

main.cpp:

#include "TransWidget.h"
#include "OpaqueWidget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    OpaqueWidget o;
    auto t = new TransWidget(&o);

    o.show();
    t->show();

    return a.exec();
}

Непрозрачный виджет просто сообщает, когда он получает щелчки мыши и события колеса. Прозрачный виджет перекрывает непрозрачный виджет.

Щелчки мыши работают как положено:

  • провалиться сквозь прозрачные области в непрозрачный виджет;
  • быть пойманным прозрачным виджетом при нажатии в его нарисованных (таким образом, непрозрачных) областях.

События колеса попадают в прозрачный виджет независимо от того, где они происходят. Такая же настройка используется для работы с Qt4.8. Это ошибка в Qt5? Возможны ли обходные пути?

Решение подобного вопроса, похоже, тоже не работает: как создать полупрозрачное окно в WPF, которое позволяет проходить событиям мыши

(Qt 5.6.1, Windows 10)

1 ответ

Решение

Принимается как ошибка Qt, подробности смотрите в https://bugreports.qt.io/browse/QTBUG-53418.

Другие вопросы по тегам