You could follow through with your current approach and leave the widgets in a main window without a layout and then recompute their positions in the resizeEvent(). You could use the mousePressEvent() and the mouseMoveEvent() to implement your dragging functionality. However, if you actually want the buttons to scale in size including the font and everything, you might have to use the Graphics View Framework to set up a QGraphicsScene where the buttons are QGraphicsWidgets and then use the scale() function of the QGraphicsScene.