Qt QGraphicsView - 工具提示不会出现

时间:2016-03-23 12:04:25

标签: qt graphics pyqt

我使用QGraphicsView在PyQt中创建2D视图。不幸的是,我似乎无法找到任何方式让工具提示出现在任何级别 - 在QGraphicsItems,QGraphicsItemGroups等。

它已经到了他们非常有用的地步,但我尝试过:

  1. 使用setToolTip()设置工具提示。
  2. 在QGraphicsView上使用setAttribute(QtCore.Qt.WA_AlwaysShowToolTips)
  3. 我认为第二个是死亡证书,但似乎什么都不做......

2 个答案:

答案 0 :(得分:2)

使用python Qt 4.8.7与PyQt 4.11.4:

似乎可以正常工作
from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.view = QtGui.QGraphicsView(self)
        self.view.setScene(QtGui.QGraphicsScene(self))
        for index, name in enumerate('One Two Three Four Five'.split()):
            item = QtGui.QGraphicsRectItem(index * 60, index * 60, 50, 50)
            item.setToolTip('Rectangle: ' + name)
            self.view.scene().addItem(item)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.view)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(400, 400)
    window.show()
    sys.exit(app.exec_())

据推测,您自己的代码中必定存在一些不同于正常行为的东西。但如果没有适当的测试用例,就无法确定。

答案 1 :(得分:1)

好的,感谢@ekhumoro提示我对问题采取更合理的方法,我已经确定了问题。

问题是由于继承结构,我过度热衷于减少代码重复。我已将它提炼成一个(非)工作示例,它看起来比原始代码更愚蠢(或者只是揭示了愚蠢):

from PyQt4 import QtGui

class MyRect(QtGui.QGraphicsRectItem, QtGui.QGraphicsItem):
    def __init__(self, index):
        QtGui.QGraphicsItem.__init__(self, )
        self.setToolTip('Rectangle: '+str(index))    # <-- This doesn't work
        QtGui.QGraphicsRectItem.__init__(self, index * 60, index * 60, 50, 50)
        #self.setToolTip('Rectangle: '+str(index))     <-- This works


class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.view = QtGui.QGraphicsView(self)
        self.view.setScene(QtGui.QGraphicsScene(self))
        for index, name in enumerate('One Two Three Four Five'.split()):
            item = MyRect(index)
            #item.setToolTip('Rectangle: ' + name)    # <-- This would work
            self.view.scene().addItem(item)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.view)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(400, 400)
    window.show()
    sys.exit(app.exec_())

最初的努力是尝试将所有的mundanities(例如设置工具提示和上下文菜单)提取到从QGraphicsItem继承的抽象类中。但是,这意味着您调用QGraphicsItem的构造函数两次,并且需要在构造函数的两个之后调用setToolTip。

毋庸置疑,我正在重构代码以删除QGraphicsItem的重复继承...