Bonjour tout le monde,
j'essaie actuellement de réaliser une vue (QGraphicsView) transparente dans laquelle je peux venir ajouter des items (QGraphicsItem).
1) Initialement, j'ai donc une vue avec une scène qui fonctionne très bien et m'affiche des QGraphicsItem, pas de problèmes.
2) Pour rendre la vue transparente, j'ajoute ensuite dans son constructeur :
Si je laisse comme ça, impossible d'interagir avec ma vue. Elle est complètement transparente et je clic "à travers".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setAttribute(Qt::WA_TranslucentBackground); setStyleSheet("background : transparent"); _tdScene = new TDScene(); setScene(_tdScene); setMouseTracking(true);
3) J'ai donc pensé redéfinir paintEvent de ma vue afin de lui définir une zone (qrect) complètement invisible qui lui permettrait de recevoir les clics souris :
J'ai donc bien ma vue avec un fond rouge à moitié transparent (brush) et quand je clic dessus, mousePressEvent de ma scène est appelé. Mais impossible de voir les QGraphicsItem que je dessine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void View::paintEvent(QPaintEvent* /*e*/){ QPainter painter(viewport()); painter.setRenderHint(QPainter::Antialiasing); QColor rectangle(0, 1, 0, 0); QPen pen(Qt::black); painter.setPen(pen); painter.setBrush(QColor(255, 0, 0, 127)); painter.drawRect(rect()); }
J'ai l'impression que le paintEvent de ma vue empêche de dessiner correctement derrière mes QGraphicsItem. Comment remédier à ça ?
Merci beaucoup !
Partager