您的位置:首页 > 汽车 > 时评 > 清空QWidget

清空QWidget

2024/9/15 18:10:18 来源:https://blog.csdn.net/yjh4866/article/details/141002199  浏览:    关键词:清空QWidget

一、背景

        Qt开发三年多了,近来用新的架构实现了原软件。为了方便其他模块的调用,尽可能的用一句代码即可调用。比如显示版权信息,只要其他模块将QWidget传过来,我将版权信息显示在该控件上就了。但如果调用两次的话,第二次调用时界面上已经有控件,新的控件显示就会重叠或者其他错误,这就要求先将传过来的QWidget清空,再添加上版权相关的控件和信息。

二、实现

        查了多种方案,都有些问题,花了些时间完善了一下别人的代码,测试了一下没测出问题,现将代码分享一下。

// 清空控件
void ClearWidget(QWidget* widget)
{ClearLayout(widget->layout());
}
void ClearLayout(QLayout* layout)
{if (NULL == layout) return;//std::function<void(QLayout*)> func_clear = [&](QLayout* layout0) {if (NULL == layout0) return;int count = layout0->count();for (int i = 0; i < count; i++) {QLayoutItem* item = layout0->itemAt(0);QWidget* widget1 = item->widget();QLayout* layout1 = item->layout();QSpacerItem* item1 = item->spacerItem();// 当前项是QWidgetif (widget1) {func_clear(widget1->layout());layout0->removeWidget(widget1);delete widget1;}// 当前项是QLayoutif (layout1) {func_clear(layout1);layout0->removeItem(layout1);delete layout1;}// 当前项是QSpacerItemif (item1) {layout0->removeItem(item1);delete item1;}}};func_clear(layout);delete layout;
}

三、注意事项

        可以传入QDialog,但是不能直接传QMainWindow,只能传QMainWindow的centralWidget。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com