Bonjour,
Je suis entrain de faire une petite application pour découvrir les feuilles de style, la gestion de l'évènement paintEvent avec Qt.
J'ai une MainWindow dérivée de QMainWindow qui contient en widget central un widget contenant un QTabWidget.
J'aimerais faire une transition en "fondu" dans ma fenêtre principale entre les images d'arrières plan (chaque page de mon QTabWidget a sa propre image d'arrière plan) lorsque l'on change de page.
Mais lorsque je change de page, ça ne ressemble pas du tout à un fondu: ça passe juste par le moment ou le fond est noir et le moment ou la nouvelle image est dessinée totalement opaque.
J'ai essayé de régler le problème avec un QTimer réglé pour me faire un update toutes les 20ms, ou encore avec un update() suivi de processEvents() directement dans paintEvent (avec une boucle while bien crade) mais ça ne résout rien. Je vois pas ce qu'il faut faire, ni où, si vous pouviez m'éclairer ça serait sympa.
Le paintEvent:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); painter.setBrush(QBrush(Qt::black, Qt::SolidPattern)); painter.drawRect(0, 0, width(), height()); QRectF imageRect(0, 0, width(), height()); //timeElapsed représente le temps depuis le dernier changement de page if(timeElapsed.elapsed() < 2000) { //previousBackground est l'image de fond de la page précédente, elle est nulle si il n'y a pas de page précédente if(!previousBackground.isNull()) { painter.setOpacity( 1.0f - timeElapsed.elapsed() /1000); painter.drawImage(imageRect, previousBackground); } painter.setOpacity( timeElapsed.elapsed() / 2000); //currentBackground est l'image de fond actuelle painter.drawImage(imageRect, currentBackground); } else { painter.setOpacity(1.0f); painter.drawImage(imageRect, currentBackground); } }
Partager