2016-05-13 47 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'標誌嗎?這是不太可能的,但這是我能想到的唯一的事情。 –

回答