Bootstrap

Qt动态增加和动态删除QWidget内控件(有布局和没有布局都有效)(qDeleteAll、delete、deleteLater、findChildren)

在QWidget界面中,不管是否采用了布局,只要是QWidget的子类,则可以用findchild()函数查找所有子类,然后通过指定函数进行删除。下面是博主总结的两种动态删除dget内控件的方法。

一、通过函数qDeleteAll()删除

其中,该函数原型有两个,分别如下:

//第一个原型
template <typename ForwardIterator>
Q_OUTOFLINE_TEMPLATE void qDeleteAll(ForwardIterator begin, ForwardIterator end)
{
    while (begin != end) {
        delete *begin;
        ++begin;
    }
}

//第二个原型
template <typename Container>
inline void qDeleteAll(const Container &c)
{
    qDeleteAll(c.begin(), c.end());
}

由上可知,第二个原型是调用第一个原型,其中第一个原型是通过迭代器,用delete来删除指定的控件类。

1.2用法如下

博主要删除指定QWidget界面内所有的QLabel子类,步骤如下

1.2.1新建一个QWidget工程,勾选UI界面,然后在UI界面内随意拖进几个QLabel,如下图所示

;