我相信QGraphics是一个完全自定义的图形界面的正确路线,但是如果你想尝试一些不需要你改变你现有方法的东西,你可以使用自定义绘画事件:
这是写在PyQt的,但你可以很容易地转化为Qt的
from PyQt4 import QtCore, QtGui
class LabelButton(QtGui.QWidget):
clicked = QtCore.pyqtSignal()
def __init__(self, labelStr, pixStr, parent=None):
super(LabelButton, self).__init__(parent)
self.label = labelStr
self.pix = QtGui.QPixmap(pixStr)
def paintEvent(self, event):
super(LabelButton, self).paintEvent(event)
rect = event.rect()
painter = QtGui.QPainter(self)
painter.drawPixmap(rect, self.pix)
pos = (rect.bottomLeft()+rect.bottomRight())/2
pos.setY(pos.y()-10)
painter.drawText(pos, self.label)
painter.end()
def mousePressEvent(self, event):
event.accept()
self.clicked.emit()
def handleClick():
print "CLICK"
if __name__ == "__main__":
app = QtGui.QApplication([])
widget = LabelButton("A Text Label", "myImage.png")
widget.resize(600,400)
widget.show()
widget.raise_()
widget.clicked.connect(handleClick)
app.exec_()
这是一个粗略的例子。通过绘制文字,您可以更好地进行调整。这个小部件需要一个标签字符串和一个图片路径,并将该图片绘制为背景,将该文本绘制为标签。您可以在绘制事件中使用此自定义小部件执行任意数量的操作,也可以使用自定义信号和事件。
来源
2012-11-24 16:55:52
jdi
你说的低效的代码是什么意思? –
[图形视图框架](http://doc.qt.digia.com/qt/graphicsview.html),但除非你的遥控器真的很大,普通按钮应该工作得很好。 – Mat