目錄
一、結(jié)果展示
二、刪除動態(tài)控件方法
三、工程代碼
1.工程文件
2.文件代碼
一、結(jié)果展示
如下圖所示,點擊左側(cè)按鈕時,刪除原有的3組控件,并生成6組控件;點擊右側(cè)按鈕時,刪除原有的6組控件,并生成3組控件。
圖1-1 動態(tài)生成和刪除控件
二、刪除動態(tài)控件方法
刪除動態(tài)控件之前,需要知道相關(guān)QWidget中的所有控件類型,使用QWidget的findChildren<控件類型*>()找出對應(yīng)類型的所有控件,并逐一刪除,例如下方代碼所示,為刪除widget中的所有QLabel控件,利用此方法可刪除widget中的所有控件。
QList<QLabel*> listLabel = ui->widget->findChildren<QLabel*>();//找出所有l(wèi)abel控件
foreach (QLabel *label, listLabel)
{
delete label;//刪除label控件
}
三、工程代碼
1.工程文件
工程文件如下圖所示
?圖3-1 工程文件
2.文件代碼
界面文件deletedynamiccontrol.ui
圖3-2 界面布局
頭文件deletedynamiccontrol.h文章來源:http://www.zghlxwxcb.cn/news/detail-524539.html
#pragma execution_character_set("utf-8")
#ifndef DELETEDYNAMICCONTROL_H
#define DELETEDYNAMICCONTROL_H
#include <QWidget>
#include <QLabel>
#include <QCheckBox>
#include <QComboBox>
#include <QGridLayout>
QT_BEGIN_NAMESPACE
namespace Ui { class DeleteDynamicControl; }
QT_END_NAMESPACE
class DeleteDynamicControl : public QWidget
{
Q_OBJECT
public:
DeleteDynamicControl(QWidget *parent = nullptr);
~DeleteDynamicControl();
private slots:
void on_pbGenerate1_clicked();
void on_pbGenerate2_clicked();
private:
Ui::DeleteDynamicControl *ui;
struct ControlGroup
{
ControlGroup() {}
QLabel *label;
QCheckBox *check;
QComboBox *combo;
};
QList<ControlGroup*> listControlGroup;
void GenerateControl(const int &iNum);
};
#endif // DELETEDYNAMICCONTROL_H
源文件deletedynamiccontrol.cpp文章來源地址http://www.zghlxwxcb.cn/news/detail-524539.html
#include "deletedynamiccontrol.h"
#include "ui_deletedynamiccontrol.h"
DeleteDynamicControl::DeleteDynamicControl(QWidget *parent)
: QWidget(parent)
, ui(new Ui::DeleteDynamicControl)
{
ui->setupUi(this);
GenerateControl(8);//默認(rèn)生成8組控件
}
DeleteDynamicControl::~DeleteDynamicControl()
{
delete ui;
}
void DeleteDynamicControl::on_pbGenerate1_clicked()
{
GenerateControl(6);//點按鈕1,生成6組控件
}
void DeleteDynamicControl::on_pbGenerate2_clicked()
{
GenerateControl(3);//點按鈕2,生成3組控件
}
void DeleteDynamicControl::GenerateControl(const int &iNum)
{
//刪除已有的控件
listControlGroup.clear();
QList<QLabel*> listLabel = ui->widget->findChildren<QLabel*>();
foreach (QLabel *label, listLabel)
{
delete label;
}
QList<QCheckBox*> listCheck = ui->widget->findChildren<QCheckBox*>();
foreach (QCheckBox *check, listCheck)
{
delete check;
}
QList<QComboBox*> listCombo = ui->widget->findChildren<QComboBox*>();
foreach (QComboBox *combo, listCombo)
{
delete combo;
}
QList<QGridLayout*> listLayout = ui->widget->findChildren<QGridLayout*>();
foreach (QGridLayout *layout, listLayout)
{
delete layout;
}
//生成控件
QGridLayout *layout=new QGridLayout;
for(int i=0;i<iNum;i++)
{
ControlGroup *control=new ControlGroup;
control->label=new QLabel;
control->label->setText(tr("輸出") + QString::number(i));
layout->addWidget(control->label,i,0,Qt::AlignHCenter);
control->check=new QCheckBox;
layout->addWidget(control->check,i,1,Qt::AlignHCenter);
control->combo=new QComboBox;
control->combo->addItems({tr("高電平"),tr("低電平")});
layout->addWidget(control->combo,i,2,Qt::AlignHCenter);
listControlGroup.append(control);
}
ui->widget->setLayout(layout);
}
到了這里,關(guān)于QT動態(tài)生成控件與刪除動態(tài)控件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!