2016-05-13 6 views
3

Ich habe eine einfache Testfall Anwendung:QT5, transparentes Fenster und Rad Ereignisse

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(); 
} 

Opaque Widget einfach meldet, wenn es bekommt Mausklicks und Wheel-Events. Ein transparentes Widget überlagert das opake Widget.

Mausklicks wie erwartet:

  • fallen durch transparente Bereiche auf dem undurchsichtigen Widget;
  • durch ein transparentes Widget erwischt werden, wenn in seinen gemalten (also undurchsichtigen) Bereichen geklickt wird.

Wheel-Events werden vom transparenten Widget erfasst, egal wo sie auftreten. Dieselbe Konfiguration wurde für die Arbeit mit Qt4.8 verwendet. Ist es ein Fehler in Qt5? Irgendwelche Workarounds möglich?

Die Lösung auf eine ähnliche Frage scheint nicht auch zu arbeiten: How to create a semi transparent window in WPF that allows mouse events to pass through

(Qt 5.6.1, Microsoft Windows 10)

+0

Windows 10 hat sich sehr verändert. Hast du versucht, * Einstellungen * -> * Geräte * -> * Maus & Touchpad *: * Scroll inaktive Fenster, wenn ich über sie schwebe * aus? Keine Antwort auf Ihre Frage, sondern etwas, um einzuschränken, was das verursacht. – IInspectable

+0

@Intspectable Wow, wusste nicht über diese Einstellung) Aber das Umschalten ändert nicht das Verhalten ... – vines

+0

Haben Sie überprüft, dass es nicht das 'Qt :: WheelFocus'-Flag für seine Fokus-Politik gesetzt hat? Das ist unwahrscheinlich, aber es ist das einzige, was mir einfällt. –

Antwort

Verwandte Themen