我正在第一次使用QGraphicsView/Scene。這是在PyQt中,但除了Python與多繼承不同之外,我認爲這是一個通用的Qt問題。QGraphicsWidget與QGraphicsLayoutItem
我開始時創建了幾個QGraphicsItem重載作爲構建塊。一旦我按照我想要的方式工作,我想嘗試將它們結合起來,並且發現我無法使用QGraphicsLayouts中的令人不愉快的驚喜。這是由於QGraphicsLayouts採用從QGraphicsLayoutItem繼承的項目,而QGraphicsItems由QGraphicsLayoutItems繼承,QGraphicsLayoutItems繼承了QGraphicsWidgets。
有一個QGraphicsItem/QGraphicsWidget的graphicsItem屬性,但看着代碼,我不認爲我可以分配我的物品到這個屬性,並讓他們正常工作。我確實發現了this example,但奇怪的是它有兩個類都繼承的例子。我很困惑。
所以我試圖找到讓我的項目在佈局中工作的最簡單的方法。有沒有比重寫和繼承這兩個類更容易的方法嗎?
第二個問題,是否應該從QGraphicsWidget繼承,還是從QGraphicsLayoutItem繼承?
用於說明何時使用sizeHint vs. boundingRect的額外功勞。
感謝幫助, 佈雷特
你能詳細說一下嗎?我的問題是,如果我從QGraphicsItem繼承,我必須覆蓋boundingRect。但是如果我從QGraphicsWidget繼承,我不會。即使QGraphicsWidget從QGraphicsItem繼承。所以顯然是一個非抽象的實現。看起來(對我來說)sizeHint,setGeometry和boundingRect都是耦合的。爲了解釋您的答案,在我看來,boundingRect()和sizeHint()都是「由場景用來管理項目」。 – 2010-11-09 05:40:59
是的,sizeHint,setGeometry和boundingRect是耦合的,因爲它們都與小部件的大小和位置有關。 sizeHint告訴佈局小部件想要的大小。 setGeometry是佈局如何告訴小部件它應該是的大小。 boundingRect是小部件告訴場景它是多大的。 QGraphicsScene不使用sizeHint()。它只用於QGraphicsLayout(和相關的類)。 – baysmith 2010-11-10 20:16:08