2016-05-13 52 views
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)

+0

Windows 10改变了很多。您是否尝试过转动*设置* - > *设备* - > *鼠标和触控板*:*当我将鼠标悬停在它们上面时,滚动非活动窗口*关闭?不是你的问题的答案,而是缩小这是什么原因造成的。 – IInspectable

+0

@IInspectable哇,不知道这个设置)但切换它不会改变行为... – vines

+0

你检查过它没有为其焦点策略设置'Qt :: WheelFocus'标志吗?这是不太可能的,但这是我能想到的唯一的事情。 –

回答