Qt5,透明window和wheel事件
Qt5, transparent window and wheel events
我有一个最简单的测试用例应用程序:
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();
}
不透明小部件仅在获得鼠标点击和滚轮事件时进行报告。透明小部件覆盖不透明小部件。
鼠标点击按预期工作:
- 穿过透明区域落到不透明小部件;
- 在其绘制(因此不透明)区域中单击时被透明小部件捕获。
Wheel 事件无论发生在何处都会被透明小部件捕获。
用于 Qt4.8 的相同设置。它是 Qt5 中的错误吗?任何可能的解决方法?
类似问题的解决方案似乎也不起作用:
How to create a semi transparent window in WPF that allows mouse events to pass through
(Qt 5.6.1, Windows 10)
已接受为 Qt 错误,请参阅 https://bugreports.qt.io/browse/QTBUG-53418 了解详细信息。
我有一个最简单的测试用例应用程序:
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();
}
不透明小部件仅在获得鼠标点击和滚轮事件时进行报告。透明小部件覆盖不透明小部件。
鼠标点击按预期工作:
- 穿过透明区域落到不透明小部件;
- 在其绘制(因此不透明)区域中单击时被透明小部件捕获。
Wheel 事件无论发生在何处都会被透明小部件捕获。 用于 Qt4.8 的相同设置。它是 Qt5 中的错误吗?任何可能的解决方法?
类似问题的解决方案似乎也不起作用: How to create a semi transparent window in WPF that allows mouse events to pass through
(Qt 5.6.1, Windows 10)
已接受为 Qt 错误,请参阅 https://bugreports.qt.io/browse/QTBUG-53418 了解详细信息。