Сначала вы должны удалить существующий менеджер макета (возвращается layout()), прежде чем вы сможете вызвать setLayout() с новым макетом.
от http://doc.qt.io/qt-5.9/qwidget.html#setLayout
Какая функция используется для удаления предыдущего макета?