LINUX.ORG.RU

История изменений

Исправление equeim, (текущая версия) :

Когда ты запихиваешь виджеты в другой виджет и layout, он автоматически становится его child'ом. Т.е. у тебя QToolButton'ы - child'ы QToolBar'ов, а они - child'ы QVBoxLayout. Все они создаются на стеке внутри одного класса и удаляются в порядке, обратном тому, в котором они расположены в определении класса. Выходит так, что QVBoxLayout удаляется первым, и пытается удалить свои child'ы QToolBar, которые созданы на стеке, что приводит к сегфолту.

И да, тебе не нужно делать setParent(this) для стековых переменных, они удаляются автоматически.

Исправление equeim, :

Когда ты запихиваешь виджеты в другой виджет и layout, он автоматически становится parent'ом. Т.е. у тебя QToolButton'ы - child'ы QToolBar'ов, а они - child'ы QVBoxLayout. Все они создаются на стеке внутри одного класса и удаляются в порядке, обратном тому, в котором они расположены в определении класса. Выходит так, что QVBoxLayout удаляется первым, и пытается удалить свои child'ы QToolBar, которые созданы на стеке, что приводит к сегфолту.

И да, тебе не нужно делать setParent(this) для стековых переменных, они удаляются автоматически.

Исходная версия equeim, :

Когда ты запихиваешь виджеты в другой виджет и layout, он автоматически становится parent'ом. Т.е. у тебя QToolButton'ы - child'ы QToolBar'ов, а они - child'ы QVBoxLayout. Все они создаются на стеке внутри одного класса и удаляются в порядке, обратном тому, в котором они расположены в определенмии класса.

И да, тебе не нужно делать setParent(this) для стековых переменных, они удаляются автоматически.