2016-04-09 18 views
2

作成したオブジェクトからの信号を接続しようとしましたが、エラーが発生しています。ここに私のコードの簡易版は、次のとおりです。PyQt5接続が機能しません:このコンテキストではアイテムをPyQt5.QtCore.QObjectに変換できません

class OverviewWindow(QMainWindow): 
    def __init__(self, projectClusters, users, contributorDict, userLastRevPerProj): 
     QMainWindow.__init__(self) 
     # Code.... 

    def createUserNodes(self): 
     userNodes = {} 
     nodeSpread = 50 
     yPos = -400 
     nodeSpan = nodeSpread + 100 
     width = (len(self.usersFilt) - 1) * nodeSpan 
     xPos = 0 - (width/2) 

     for user in self.usersFilt: 
      newItem = NodeItem(xPos, yPos, self.nodeDiameter, user, True) 
      newItem.nodeDoubleClicked.connect(self.dc) 
      userNodes[user] = newItem 
      self.graphicsScene.addItem(newItem) 
      xPos += nodeSpan 

     return userNodes 

    @pyqtSlot(str) 
    def dc(self, text): 
     print(text) 


class NodeItem(QGraphicsItem): 
    nodeDoubleClicked = pyqtSignal(str) 

    def __init__(self, xPos, yPos, diameter, text, isUserNode): 
     super(NodeItem, self).__init__() 
     # Code... 

    def mouseDoubleClickEvent(self, event): 
     self.nodeDoubleClicked.emit(self.texts) 

それは私に、このエラーを与え、それを実行しようとすると:

line 84, in createUserNodes 
newItem.nodeDoubleClicked[str].connect(self.dc) 
TypeError: NodeItem cannot be converted to PyQt5.QtCore.QObject in this context 

私はこれが何を意味するかまたはそれを修正する方法は考えています。

+0

私はあなたが持っていたが、super(NodeItem、self).mouseDoubleClickEvent(event)を使用して解決できなかった同様の問題を抱えています。 – sunyata

答えて

5

QGraphicsItemQObjectから継承されないため、QGraphicsItemのインスタンスから信号を送信することはできません。これは、QGraphicsItemの代わりにQGraphicsObjectサブクラス化することで解決できます。http://doc.qt.io/qt-5/qgraphicsobject.html

+0

私のプログラムは今実行されます。しかし、私のプログラムはNodeItemをダブルクリックするとクラッシュし、Qtのドキュメントサイトはダウンしているようです。しかし、非常に助けてくれてありがとう –

+1

私が行方不明だったので、それはクラッシュしていた スーパー(NodeItem、自己).mouseDoubleClickEvent(イベント) 私の機能から。それは今働く。 –

関連する問題