Qt – éviter le fond blanc lors du redimensionnement (définir immédiatement une couleur d’arrière-plan)

La question est en gras à la fin, veuillez donc la lire dans son ensemble.

J’ai un widget QAbstractScrollArea que je rends manuellement et complètement dans l’événement OnPaint ().

Dans son constructeur je mets

 setAtsortingbute( Qt::WA_OpaquePaintEvent, true ); setAtsortingbute( Qt::WA_NoSystemBackground, true ); setStyleSheet( "QWidget { background-color: rgb(0,0,77); }" ); 

et l’événement de peinture ressemble à ceci:

 void MyArea::paintEvent (QPaintEvent *event) { QPainter view(viewport()); view.fillRect(rect(), backgroundBrush); renderedPixmap = heavyAndSlowRenderingOnAPixmap(); view.drawPixmap(viewRect, renderedPixmap, pixmapRect); } 

Comme vous pouvez le voir, une fonction “lente” est impliquée dans le rendu des images dans une pixmap.

Le problème est le suivant: quand je redimensionne la fenêtre, je peux voir un instant un scintillement blanc dans la zone pas encore redessinée

entrer la description de l'image ici

Je sais que je ne peux pas éviter la région blanche jusqu’à ce que la fenêtre d’affichage ait été redessinée, mais j’aimerais dessiner cette région blanche avec la couleur d’arrière-plan immédiatement .

Alors, voici la question: est-ce que je peux afficher une couleur de fond immédiatement avant le rendu en pixmap ?

Je ne peux pas sembler trouver un moyen d’y parvenir .. il semble que toutes les opérations graphiques sont mises en mémoire tampon et ensuite immédiatement binarys sur l’écran ensemble. J’utilise Windows 8.1 x64 et Qt5. Un moyen de dessiner immédiatement la couleur d’arrière-plan et de procéder ensuite au rest du rendu?

La meilleure solution serait de déplacer le rendu coûteux du paintEvent (), potentiellement dans un autre thread. Vous voudrez de toute façon mettre en cache le pixmap rendu. Mettez à jour ce pixmap lorsque vous en avez vraiment besoin, puis appelez update () pour déclencher un repeindre.