Podczas niszczenia obiektu klasy QObject (z której dziedziczone są wszystkie widgety) niszczone są również wszystkie obiekty przypisane go niego jako obiekty potomne. Jeżeli dziecko obiektu jest obiektem na stosie lub globalnym to może się zdarzyć, że dziecko będzie niszczone dwa razy (double free) co powoduje wykrzaczenie programu.
https://doc.qt.io/qt-5/qobject.html#dtor.QObject
Zaalokuj dynamicznie wszytkie obiekty potomne.
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFrame>
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QWidget mainWindow;
mainWindow.resize(800, 600);
auto mainLayout = new QHBoxLayout();
mainLayout->setAlignment(Qt::AlignLeft);
auto buttonsLayou = new QVBoxLayout();
buttonsLayou->setAlignment(Qt::AlignTop);
buttonsLayou->setContentsMargins(0, 0, 0, 0);
auto frame1 = new QFrame(&mainWindow);
frame1->setObjectName("myObject");
frame1->setStyleSheet("#myObject { border: 1px solid black; }");
frame1->setMinimumSize(200, 200);
mainLayout->addWidget(frame1);
auto btn1 = new QPushButton("One", frame1);
auto btn2 = new QPushButton("Two", frame1);
auto btn3 = new QPushButton("Three", frame1);
auto btn4 = new QPushButton("Four", frame1);
btn1->setMinimumSize(200, 40);
btn2->setMinimumSize(200, 40);
btn3->setMinimumSize(200, 40);
btn4->setMinimumSize(200, 40);
buttonsLayou->addWidget(btn1);
buttonsLayou->addWidget(btn2);
buttonsLayou->addWidget(btn3);
buttonsLayou->addWidget(btn4);
frame1->setLayout(buttonsLayou);
mainWindow.setLayout(mainLayout);
mainWindow.show();
return app.exec();
}