2014-05-25 79 views
1

我使用QPainter一個QWidget內畫出一串省略號在黑色的背景如下:如何檢測鼠標點擊在pyside中繪製的橢圓?

paint = QPainter() 
paint.begin(self) 

paint.setBrush(Qt.black) 
paint.drawRect(event.rect()) 

brush = ... 
paint.setBrush(brush) 
paint.drawEllipse(center, rad, rad) 

一串省略號後繪製,然後我要檢測一個鼠標點擊的這樣一個一個現有的橢圓。我在QPainter的文檔中找不到任何明顯的。

但如果是別的用來代替QPainter東西,請提供顯示我在其他的框架上面的例子爲例。

+0

你的意思是這個代碼放入的paintEvent或類似的東西?你能不能設置在鼠標點擊事件,輪流在窗口小部件調用更新,這將觸發相應的事件來看,這將檢查對布爾變量,如果它被設置,它將繪製橢圓布爾變量?聽上去怎麼樣? – lpapp

+0

我想以任何方式繪製橢圓。獨立於鼠標點擊。但是當我點擊其中一個省略號時,我想要調用一個方法。 – Alex

+0

好的,我明白了,但我不明白爲什麼你在最後發表了另一個問題。這似乎與主要問題沒有關係。另外,你在'classses'中有一個錯字。 – lpapp

回答

1

你需要自己檢測自定義區域如下:

def mousePressEvent(self, event): 
    ''' You will have to implement the contain algorithm yourself''' 
    if sel.fo(even.pos()): 
     self.myMethod() 

QGraphicsEllipseItem.contains()

或者,你可以看着QGraphicsEllipseItem因爲它有contains-logic implemented and offered

def mousePressEvent(self, event): 
    if self.contains(event.pos()): 
     self.myMethod() 

,然後製作了相應的參數你的對象:

scene = QGraphicsScene() 
ellipseItem = MyGraphicsEllipseItem(centerx, centery, rad, rad) 
scene.addItem(ellipseItem) 

view = QGraphicsView(scene) 
view.show() 

scene.setBackgroundBrush(Qt.black) 
+0

但是我應該如何使用這個'QGraphicsElliseItem'?文檔說它將它添加到'QGraphicsScene'。如何添加'QGraphicsScene'到我的實際主要'QWidget'?我能直接做到嗎?或者我需要將THAT添加到其他東西?我需要一個示例代碼! – Alex

+0

@Alex:你是Qt新手,對嗎? QGraphicsView是QWidgets完全不同的框架。你可以這樣做;你甚至可以做QML,但是真的,如果你想堅持QWidgets,你必須自己實現這個,對不起。那就是這個時期。克服它,並做的東西。 – lpapp

+0

是的,我是Qt新手(經常完全困惑),我不知道這些是不同的框架。我可以嘗試使用這個其他框架。其中,QGraphicsView'對應於'QWidget'嗎?他們有類似的方法嗎?你不能提供一個簡單的示例代碼模板,所以我看到原則上怎麼做? – Alex