3
我有一个简单的测试案例应用: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中的错误吗?任何可能的解决方法?
解决类似的问题似乎并没有工作也: How to create a semi transparent window in WPF that allows mouse events to pass through
(QT 5.6.1的Windows 10)
Windows 10改变了很多。您是否尝试过转动*设置* - > *设备* - > *鼠标和触控板*:*当我将鼠标悬停在它们上面时,滚动非活动窗口*关闭?不是你的问题的答案,而是缩小这是什么原因造成的。 – IInspectable
@IInspectable哇,不知道这个设置)但切换它不会改变行为... – vines
你检查过它没有为其焦点策略设置'Qt :: WheelFocus'标志吗?这是不太可能的,但这是我能想到的唯一的事情。 –