I'm having an issue where a custom widget I am making appears just fine when added to a QGridLayout without specifying an alignment, but when I specify an Alignment it disappears.
Here is the custom widget:
class OutlineLabel(QWidget):
def __init__(self, text, parent=None):
QWidget.__init__(self, parent)
self.text = text
def paintEvent(self, event=None):
painter = QPainter(self)
path = QPainterPath()
pen = QPen();
font = QFont("Helvetica", 14, 99, False)
brush = QBrush(QtCore.Qt.white)
pen.setWidth(1);
pen.setColor(QtCore.Qt.black);
painter.setFont(font);
painter.setPen(pen);
painter.setBrush(brush)
path.addText(0, 20, font, self.text);
painter.drawPath(path);
Here is an example where it will display just fine:
app = QApplication(sys.argv)
wnd = QWidget()
wnd.resize(400,400)
grid = QGridLayout()
test = OutlineLabel("hello")
grid.addWidget(test, 0, 0)
wnd.setLayout(grid)
wnd.show()
sys.exit(app.exec_())
But if I change it to the following, it no longer shows:
app = QApplication(sys.argv)
wnd = QWidget()
wnd.resize(400,400)
grid = QGridLayout()
test = OutlineLabel("hello")
grid.addWidget(test, 0, 0, QtCore.Qt.AlignHCenter)
wnd.setLayout(grid)
wnd.show()
sys.exit(app.exec_())
Is there some information I need to set in the OutlineLabel class to work correctly with Alignments?
It could be a problem with size hint (your widget is empty).
If you reimplement the
sizeHint()
method to return a validQSize
, your widget should appear: