2010-06-06 5 views
2

J'ai besoin d'afficher QGraphicsScene dans 2 QGraphicsViews à condition qu'ils aient des facteurs d'échelle différents pour les éléments dans la scène. La fonction la plus proche que j'ai trouvée est drawItems(), mais pour autant que je puisse comprendre, elle doit être appelée manuellement. Comment repeindre les vues automatiquement? Je ces deux fragments de code dans le programme:Comment utiliser le dessin personnalisé dans QGraphicsViews dans PyQt?

class TGraphicsView(QGraphicsView): 

    def __init__(self, parent = None): 
     print("__init__") 
     QGraphicsView.__init__(self, parent) 

    def drawItems(self, Painter, ItemCount, Items, StyleOptions): 
     print("drawItems") 
     Brush = QBrush(Qt.red, Qt.SolidPattern) 
     Painter.setBrush(Brush) 
     Painter.drawEllipse(0, 0, 100, 100) 

...

Mw.gvNavigation = TGraphicsView(Mw) # Mw - main window 
    Mw.gvNavigation.setGeometry(0, 0, Size1, Size1) 
    Mw.gvNavigation.setScene(Mw.Scene) 
    Mw.gvNavigation.setSceneRect(0, 0, Size2, Size2) 
    Mw.gvNavigation.show() 

__init__ œuvres, Mw.gvNavigation est affiché et il y a Mw.Scene items dedans, mais drawItems() est pas appelé.

Répondre

1

Les méthodes drawItems sur les objets QGraphicsView et QGraphicsScene ont été déconseillées dans Qt 4.6 et doivent être activées à l'aide de l'indicateur IndirectPainting, mais je ne recommanderais pas d'utiliser des fonctions obsolètes.

Voici un autre stack overflow question sur un problème similaire. L'une des réponses montre comment rendre les méthodes de peinture sur des éléments individuels d'une scène conscients de la vue qui les peint, et utiliser un code de peinture différent lorsqu'il est dessiné dans différentes vues.

Questions connexes