Я работаю с QGraphicsView/Scene в первый раз. Это в PyQt, но, за исключением того факта, что Python отличается множественным наследованием, я думаю, что это общий вопрос Qt.QGraphicsWidget против QGraphicsLayoutItem
Я начал с создания нескольких перегрузок QGraphicsItem в качестве строительных блоков. Как только у меня были те, кто работал так, как я хотел, я хотел попытаться объединить их и был неприятно удивлен, обнаружив, что не могу использовать QGraphicsLayouts. Это связано с тем, что QGraphicsLayouts принимает элементы, которые наследуются от QGraphicsLayoutItem, а QGraphicsItems наследуются QGraphicsLayoutItems, которые, в свою очередь, унаследованы QGraphicsWidgets.
Существует свойство graphicsItem объекта QGraphicsItem/QGraphicsWidget, но, глядя на код, я не думаю, что могу назначить свой элемент этому свойству и заставить их работать правильно. Я нашел this example, но, как ни странно, у него есть примеры, наследующие оба класса. Довольно смущает меня.
Так что я пытаюсь найти самый простой способ заставить мои объекты работать в макетах. Есть ли более простой способ сделать это, чем переписывать и наследовать один из этих двух классов?
Вторичный вопрос: существует ли правило большого пальца, когда вы должны наследовать от QGraphicsWidget и когда вы должны наследовать от QGraphicsLayoutItem?
Дополнительный кредит для объяснения при использовании параметра sizeHint vs. boundingRect.
Цените помощь, Brett
Можете ли вы подробнее рассказать? Моя проблема в том, что если я наследую QGraphicsItem, я должен переопределить boundingRect. Но если я наследую QGraphicsWidget, я этого не делаю. Хотя QGraphicsWidget наследуется от QGraphicsItem. Таким образом, очевидно, что не абстрактная реализация. И кажется (мне) sizeHint, setGeometry и boundingRect все связаны. Чтобы перефразировать ваш ответ, мне кажется, что как boundingRect(), так и sizeHint() используются «сценой» для управления элементами ». –
Да, sizeHint, setGeometry и boundingRect связаны потому, что все они относятся к размеру и положению виджета. РазмерHint сообщает макет, какой размер должен выглядеть виджет. SetGeometry - это то, как макет сообщает виджету размер, который должен быть. Функция boundingRect - это то, как виджет сообщает сценам, какой размер он имеет. QGraphicsScene не использует sizeHint(). Он используется только в QGraphicsLayout (и связанных классах). – baysmith