fredericmazue wrote:Quote:
Je ne suis pas sur d'appliquer la bonne méthode du double buffer
En effet. L'idée est de dessiner TOUS les composants dans UNE image. Je t'ai parlé d'une boucle de dessin de tous les widgets d'un coup en réponse aux événements souris.
Si, au contraire, d'une manière ou d'une autre, tu provoques un repaint de la fenêtre ça scintillera toujours.
Quote:
Avec qt4 il paraitrait que la technique du double buffer ne sert à rien puisque qt le ferait tout seul comme un grand, je n'en suis pas convaincu.
"il paraîtrait"... Moi je connais pas les "il paraîtrait".
Mais qu'une image QT4 soit double-bufferisée n'implique pas que ça te dispense de coder la boucle que j'essaie de t'expliquer. Si tu afficher n images double-bufferisées dans ta fenêtre, tu ne fais pas ce qu'il faut. Ce qu'il faut est que le fond de ta fenêtre soit constitué d'une seule image double-bufferisée entièrement dessinée en arrière plan.
Ok je me lance dans le dessin sur une seule image double buffeurisée.
J'ai un soucis pour afficher un simple carré. Lorsque ce code marchera, j'aurais compris comment fonctionne exactement les qpainterpath et je pourrais alors me lancer dans la nouvelle conception.
from PyQt4 import QtGui, QtCore
import sys
class DrawWidget(QtGui.QLabel):
def __init__(self, parent=None):
super (DrawWidget, self).__init__ (parent)
QPath = QtGui.QPainterPath()
painter = QtGui.QPainter()
QPath.setFillRule(QtCore.Qt.OddEvenFill)
# Partie qui sera encapsulee dans les fonctions setupShape de mes objets graphiques
QPath.lineTo(0.0,87)
QPath.lineTo(0.0,60)
QPath.lineTo(10.0,60)
QPath.lineTo(35,35)
QPath.lineTo(100.0,35)
QPath.lineTo(100, 87)
QPath.lineTo(0.0, 87)
painter.begin(self)
# Utile ou pas? :
painter.fillRect(0,0,800,600, QtCore.Qt.white)
painter.fillPath(QPath, QtGui.QBrush(QtCore.Qt.BDiagPattern))
painter.end()
class DrawGraph(QtGui.QFrame):
def __init__(self, parent=None):
QtGui.QFrame.__init__(self, parent)
self.move(0, 0)
self.setMinimumSize(800, 600)
self.setFrameStyle(QtGui.QFrame.Sunken | QtGui.QFrame.StyledPanel)
self.setWindowTitle(self.tr("Test AFPy Objets Graphique"))
dw = DrawWidget(self)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = DrawGraph()
window.show()
sys.exit(app.exec_())
Avec tout ça rien ne s'affiche...
*
Merci encore
Ok je me lance dans le dessin sur une seule image double buffeurisée.
J'ai un soucis pour afficher un simple carré. Lorsque ce code marchera, j'aurais compris comment fonctionne exactement les qpainterpath et je pourrais alors me lancer dans la nouvelle conception.
Avec tout ça rien ne s'affiche...
*
Merci encore