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_()
これは大まかな例です。テキストの描画をより細かく調整できます。このウィジェットは、ラベル文字列と画像パスを受け取り、画像を背景として、テキストをラベルとして描画します。ペイント イベントとカスタム シグナルおよびイベントの両方で、このカスタム ウィジェットを使用してさまざまなことを行うことができます。