2010-01-06 6 views
1

Lorsque je clique sur un bouton ma fenêtre principale, je veux qu'il devienne transparent pour clavier et souris des événements, à savoir tous les événements clavier et souris doivent passer à toutes les fenêtres ci-dessous comme si cette fenêtre est pas présent là.KEYBOARD- et le widget de souris événements transparent

Qt::WA_TransparentForMouseEvents ne fonctionne pas ici car ce faire que les fenêtres enfant transparent pour clavier et souris événements, je suppose. Et ma fenêtre est la fenêtre principale et je veux passer tout l'événement à n'importe quelle fenêtre sur le bureau non seulement la fenêtre de parent.

+0

double exact: http://stackoverflow.com/questions/987019/qt-top-level-widget-with-keyboard-and-mouse-event-transparency –

Répondre

2

J'utilise Qt::WA_TransparentForMouseEvents dans ma demande et il fonctionne très bien.

Je ne comprends pas le problème que vous rencontrez, mais il devrait fonctionner. Si vous avez toujours un problème, attribuez la valeur Qt::WA_TransparentForMouseEvents et Qt::WA_Translucentbackground.

+0

ont u jamais utilisé "WS_EX_TRANSPARENT" dans MFC , je veux quelque chose de similaire à cela. ce que fait (Qt :: WA_TransparentForMouseEvents) rend l'enfant transparent à l'événement souris et enverra tous les événements enfants au parent, mais que se passe-t-il si ma fenêtre pour rendre l'événement souris transparent est une fenêtre de niveau supérieur ou est ma fenêtre principale. ce drapeau ne semble pas fonctionner là. Quand nous utilisons setWindowOpacity (0.0), tous les événements le traversent, mais le problème est que même si je le dessine, il devient invisible (fenêtre transparente), mais je veux que les dessins soient visibles et que les événements de la souris continuent. il. – Gajender

2

Voici l'exemple de code qui me permet de faire tirer sur et encore des événements de la souris passer par là.

Sample::Sample(QWidget *pParent):QWidget(pParent) 
{ 
    setAttribute(Qt::WA_TranslucentBackground); 
    setAttribute(Qt::WA_TransparentForMouseEvents); 
    setWindowFlags(Qt::FramelessWindowHint); 
    QDesktopWidget qDesktopWidget; 
    QRect screenSize = qDesktopWidget.screenGeometry(); 
    setGeometry(screenSize); 
} 

Sample::~Sample() 
{ 
} 

void Sample::paintEvent(QPaintEvent*) 
{ 
    QDesktopWidget new QDesktopWidget(); 
    QRect rectangle = qDesktopWidget->screenGeometry(); 
    setGeometry(rectangle); 

    const QPoint points[5] = { 
     QPoint(0, 20), 
     QPoint(rectangle.width(), 20), 
     QPoint(rectangle.width(), rectangle.height()), 
     QPoint(0,rectangle.height()), 
     QPoint(0, 0) 
    }; 

    QPen pen(Qt::blue, 10, Qt::SolidLine, Qt::SquareCap); 
    QPainter painter(this); 
    painter.setPen(pen); 
    painter.drawPolyline(points, 5); 
    painter.end(); 
} 
+0

Rahul, ce que vous avez fait ici a rendu la fenêtre translucide même si nous ne mettons pas l'indicateur transparentForMouse et les événements de la souris, mais lorsque nous mettons le drapeau "WindowStaysOnTopHint" la transparence disparaît. et un autre problème avec cela est qu'il suffit de donner la transparence de la souris à la zone qui est transparente, pas à la fenêtre complète, la zone dessinée a toujours la souris. Ce type de comportement peut même être atteint en utilisant setMask() sur un widget et d'utiliser une image alpha mélangé. mais ce que je veux, c'est faire passer tous les événements, le clavier de la souris et tous les.drawing sera toujours visible à l'utilisateur, dans la fenêtre de cas ur va également à l'arrière-plan. – Gajender

Questions connexes