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 :

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);
Si je laisse comme ça, impossible d'interagir avec ma vue. Elle est complètement transparente et je clic "à travers".

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 :

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 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.

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 !