我使用的是FlowLayout,是从QLayout继承的类,删除layout里的控件之后虽然设置了margin,但是控件位置错乱,控件在靠最左的位置。
之前使用的时候删除控件用的takeAt是没有问题的,代码如下:
int index = m_pFlowlayout->indexOf(curWidget)
QLayoutItem *currentItem = m_pFlowlayout->takeAt(index);
delete currentItem;
delete curWidget
m_pFlowlayout重新设置margin和spacing
这种方式移除了一个item并删除item和widget
这次使用出现了布局问题,解决方法
添加 curWidget->setParent(nullptr);
虽然之前并没有问题,但安全的做法如下:
curWidget->setParent(nullptr);
int index = m_pFlowlayout->indexOf(curWidget)
QLayoutItem *currentItem = m_pFlowlayout->takeAt(index);
m_pFlowlayout->removeWidget(curWidget);
delete currentItem ;
currentItem = nullptr;
delete curWidget
curWidget = nullptr;
m_pFlowlayout重新设置margin和spacing