Je dois dessiner une fenêtre transparente (soit ou QFrame
ou QWidget
), mais sans utiliser WA_TranslucentBackground
. La raison en est que les fenêtres contiendront d'autres widgets enfants rendus via OpenGL, et en utilisant cette propriété rend ces fenêtres invisibles sur Windows, comme documenté here. Cela fonctionne très bien dans Mac cependant, j'ai besoin d'une solution différente sur Windows seulement, car cela ne fonctionne pas là. J'ai essayé ceci: mise en blanc pixmap
. Mais il apparaît toujours avec un fond gris:Qt - Dessiner une fenêtre entièrement transparente dans Windows sans utiliser WA_TranslucentBackground
#include <QApplication>
#include <QLabel>
#include <QBitmap>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel l;
l.setWindowFlags(Qt::FramelessWindowHint);
QPixmap p("");
l.setPixmap(p);
l.setScaledContents(true);
l.resize(300, 500); //just to test my idea
l.setMask(p.scaled(l.width(),l.height(),Qt::IgnoreAspectRatio,
Qt::SmoothTransformation).mask());
l.show();
return a.exec();
}
Quelqu'un peut-il suggérer tout autre moyen d'y parvenir sous Windows, i.e. une fenêtre totalement transparente? Plate-forme - Qt 5.3.1, 32 bits. P.S - Il n'a pas besoin de se comporter comme une fenêtre translucide, c'est-à-dire que l'arrière-plan peut être cliqué à travers les parties transparentes d'un widget rendu par WA_TranslucentBackground
. Ici, tant qu'il est transparent, ça ira, il ne doit pas être cliquable.
Peut-être utiliser SetWindowRgn pour que la région de la fenêtre parent se compose des rectangles de la fenêtre enfant créant ainsi l'illusion d'un parent invisible. – Jonathan
Pouvez-vous ajouter un exemple de travail minimal comme réponse? – SexyBeast
Je ne suis actuellement pas proche d'un environnement de compilation approprié. Mais voici un lien vers une page codeproject qui utilise SetWindowRgn pour créer des trous dans une fenêtre. http://www.codeproject.com/Articles/291/Creating-holes-in-a-window – Jonathan