Как использовать пользовательский рисунок в QGraphicsViews в PyQt? - PullRequest
2 голосов
/ 06 июня 2010

Мне нужно просмотреть QGraphicsScene в 2 QGraphicsViews с условием, что они имеют разные масштабные коэффициенты для элементов в сцене. Самая близкая функция, которую я нашел, это drawItems(), но, насколько я понимаю, она должна вызываться вручную. Как перекрасить взгляды автоматически? У меня есть два фрагмента кода в программе:

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__ работает, Mw.gvNavigation отображается и в нем Mw.Scene items, но drawItems() не вызывается.

1 Ответ

1 голос
/ 25 июня 2010

Методы drawItems в объектах QGraphicsView и QGraphicsScene устарели в Qt 4.6 и должны быть включены с помощью флага IndirectPainting, но я бы не рекомендовал использовать устаревшие функции.

Вот еще один вопрос переполнения стека по аналогичной проблеме. Один из ответов показывает, как заставить методы рисования на отдельных элементах сцены знать, какой вид их рисует, и использовать другой код рисования при рисовании в разных видах.

...