Problèmes de scintillement [Qt Jambi] - Java - Programmation
Marsh Posté le 27-08-2007 à 04:11:53
Vous n'avez aucune idée ? J'aimerais savoir s'il y a un autre moyen pour charger un fond d'écran dans une fenêtre et/ou s'il y aurait un moyen pour forcer l'utilisation du Double Buffering sous X11.
Merci...
Jean-Marc.
Marsh Posté le 23-08-2007 à 09:21:27
Bonjour à tous,
Je suis en train de développer une application Java utilisant Qt Jambi (Qt 4.3.0). Cette application doit tourner directement sous X11, donc sans utiliser KDE ni GNOME : en fait, il s'agit de fabriquer un mini desktop en Java. J'ai donc une fenêtre avec un fond d'écran et des QLabel (les icônes sur le bureau). Ces derniers chargent des QPixmap contenant des PNG transparents (grâce à la méthode setPixmap directement invoquée dans le constructeur des Widgets). Jusque-là, tout va bien : l'affichage se fait de manière correcte sous X11 et même sous Windows.
Cependant, j'ai voulu coder une fonction de Drag & Drop pour pouvoir déplacer les icônes en maintenant le bouton de la souris enfoncé, et là, malheur, il y a des scintillements quand on déplace les icônes sur la fenêtre (sous X11) ! Du coup, j'ai testé mon application sous Windows pour voir si le problème persistait et je n'ai pas ce bug : le déplacement se fait correctement. Je n'utilise jamais le moindre PaintEvent : les déplacements se font avec des QWidget.move() (dans la méthode mouseMoveEvent) et je mets l'icône en avant-plan avec la méthode QWidget.raise() au moment où l'utilisateur clique sur l'icône (donc dans la méthode mousePressEvent) pour qu'elle soit au-dessus des autres. On ne peut pas simplifier davantage l'affichage : il n'y aucun repaint ou quoique ce soit qui pourrait déclencher ce problème, je me suis appuyé à fond sur les QLabel et sur le système interne de Qt.
En y regardant de plus près, j'ai remarqué que ce n'est pas l'icône qui scintille, mais ce qu'il y a autour (donc le wallpaper). Du coup, j'ai deux pistes pour résoudre mon problème, mais je ne sais pas comment les creuser :
1. Ma méthode pour afficher le wallpaper n'est pas optimale. Le fond d'écran est un QLabel dans lequel je charge l'image via la méthode setPixMap. J'ai essayé les feuilles de style avec background-image mais j'ai exactement le même problème. Y a-t-il une autre technique pour mettre un fond d'écran à une fenêtre ?
2. Y aurait-il un moyen pour forcer un Double-Buffering via Qt sous X11 ? J'ai entendu dire que le Double-Buffering était activé par défaut dans Qt 4 mais s'il était généralisé sur toute la fenêtre, je n'aurais pas été confronté à ce problème : cependant comme ça marche sous Windows, je me suis dit que le Double-Buffering était éventuellement désactivé par défaut sous X11 et qu'il y avait peut-être un moyen pour l'activer explicitement. Cependant, je n'ai rien trouvé de tel dans la doc, donc quelqu'un connaîtrait-il la méthode miracle ?
3. Bien sûr, toute autre idée est la bienvenue...
Je vous remercie d'avance pour votre aide, et j'espère que j'ai été suffisamment clair dans mon post !
Jean-Marc.