原因:
有时我们需要在程序中动态添加布局或控件等,下面用程序来展示一下相应的方法:
效果:
点击删除:
删除所有控件:
实现如下:
testlayout.h
#ifndef TESTLAYOUT_H
#define TESTLAYOUT_H
#include <QWidget>
#include <QPushButton>
#include <QGroupBox>
#include <QVBoxLayout>
class TestLayout : public QWidget
{
Q_OBJECT
public:
explicit TestLayout(QWidget *parent = nullptr);
void removeAllWidget();
signals:
public slots:
private:
QWidget* m_Parent;
QGroupBox* buttonGroup;
QVBoxLayout* widgetLayout;
QList<QPushButton*> m_TrackerButtonList;
};
#endif // TESTLAYOUT_H
testlayout.cpp
#include "testlayout.h"
TestLayout::TestLayout(QWidget *parent) : QWidget(parent),widgetLayout(nullptr)
{
m_Parent = parent;
for (int i = 0; i < 7; i++)
{
QPushButton *button = new QPushButton("");
button->setFixedSize(QSize(60 , 20 ));
button->setStyleSheet(QString("border: 1px solid #323232; \
border-radius:0px; \
padding:0px 0px; \
background-color:#126215;"));
this->m_TrackerButtonList.push_back(button);
}
QHBoxLayout* trackerLayout = new QHBoxLayout();
trackerLayout->setObjectName("trackerButtonLayout");
trackerLayout->setContentsMargins(5, 5, 5, 5);
trackerLayout->addStretch();
for (size_t i = 0; i < this->m_TrackerButtonList.size(); i++)
{
trackerLayout->addWidget(this->m_TrackerButtonList[i]);
trackerLayout->addStretch();
}
buttonGroup = new QGroupBox();
buttonGroup->setLayout(trackerLayout);
buttonGroup->setStyleSheet(QString("border: 1px solid #323232; \
border-radius:0px; \
padding:0px 0px; \
background-color:#121315;"));
widgetLayout = new QVBoxLayout(m_Parent);
widgetLayout->addWidget(buttonGroup);
this->setLayout(widgetLayout);
}
void TestLayout::removeAllWidget()
{
QLayout* _layout = this->layout();
if (_layout)
{
int xdd = _layout->count();
for (int i = 0; i < _layout->count(); ++i)
{
if (QLayoutItem* _item = _layout->itemAt(i))
{
if (QWidget* _itemWidget = _item->widget())
{
_itemWidget->setParent(NULL);
_layout->removeWidget(_itemWidget);
}
else
delete _layout->takeAt(i);
}
}
}
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mTestLayout = new TestLayout(this);
ui->verticalLayout->insertWidget(0,mTestLayout);
// ui->verticalLayout->addWidget(mTestLayout);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
mTestLayout->removeAllWidget();
// mTestLayout->show();
//ui->verticalLayout->removeWidget(mTestLayout);
// this->update();
}