QT动态生成控件与删除动态控件

这篇具有很好参考价值的文章主要介绍了QT动态生成控件与删除动态控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、结果展示

二、删除动态控件方法

三、工程代码

1.工程文件

2.文件代码


一、结果展示

如下图所示,点击左侧按钮时,删除原有的3组控件,并生成6组控件;点击右侧按钮时,删除原有的6组控件,并生成3组控件。

qt 删除控件,qt,ui,c++

图1-1 动态生成和删除控件

二、删除动态控件方法

删除动态控件之前,需要知道相关QWidget中的所有控件类型,使用QWidget的findChildren<控件类型*>()找出对应类型的所有控件,并逐一删除,例如下方代码所示,为删除widget中的所有QLabel控件,利用此方法可删除widget中的所有控件。
    QList<QLabel*> listLabel = ui->widget->findChildren<QLabel*>();//找出所有label控件
    foreach (QLabel *label, listLabel)
    {
        delete label;//删除label控件
    }

三、工程代码

1.工程文件

工程文件如下图所示

qt 删除控件,qt,ui,c++

 图3-1 工程文件

2.文件代码

界面文件deletedynamiccontrol.ui

qt 删除控件,qt,ui,c++

图3-2 界面布局

头文件deletedynamiccontrol.h

#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文章来源地址https://www.toymoban.com/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);//默认生成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);
}


到了这里,关于QT动态生成控件与删除动态控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 6. 其他类调用Ui中的控件

    1. 把主类指针this传给其他类,tcpClientSocket = new TcpClient(this); 2. 把ui类改为公共类 3. 保存主类传来的指针保存,通过该指针调用UI中的控件 4. 在pro文件中增加QT += network 5. 效果

    2024年02月13日
    浏览(37)
  • VS QT——ui不显示新添加成员(控件)||代码无提示

    场景1:新建项目,在ui里编辑之后,新添加的控件不显示代码提示。 场景2:成员 ui  报错 不允许使用不完整的类型  因为是刚开始学,花了两三天才找到解决办法。 网上方法: 重新编译 ui文件 + 重新扫描解决方案 (但是我这里还是无法解决) 根本原因:缺少xxx.ui 的头文

    2024年02月13日
    浏览(42)
  • 解决QT中UI控件布局更改后运行结果没有发生变化的问题

    在学习QT中,遇到了一个问题,那就是当我UI中更改了控件布局后,运行的结果却并没有发生改变,于是我上网查找了一些资料,大多略显麻烦。 效果如下:这是UI控件更改布局后  这是运行后结果 显然,UI文件中并没有更新。 我的解决方案是: 1.首先在项目文件中找到UI文件

    2024年02月11日
    浏览(82)
  • 【Visual Studio】Qt 在其他 cpp 文件中调用操作 ui 界面控件

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 还整了一个如何相互之间调用函数的文章,感兴趣可以看:【Visual Studio】Qt 在其他 cpp 文件中调用主工程下文件中的函数。 主界面工程为 A ,添加的文件名字为 test ,目标是在

    2024年02月05日
    浏览(51)
  • QT界面调用ui,定义主MainWindow中的子控件的槽函数

    在QT的应用中,不可避免需要使用QtDesigner,创建的ui如何调用呢,这里给出我的调用方法。  所有设计做完后,保存ui文件,终端输入: 得到ui.h文件,新建mainwindow.h文件,输入: 新建mainwindow.cpp文件,输入: 新建main.cpp文件,输入: 编译即可,编译需要编写pro文件。 除此之外,

    2024年02月12日
    浏览(42)
  • Qt项目UI文件中新添加的控件在代码中不识别的问题

    ui-XXXX 在UI界面中新添加了控件,但是在代码中怎么也不出现,或者划红线 我看不少人说备份删除文件再添加,或者关闭QT再打开。。。 其实只要右键项目清除构建,然后重新构建就可以了, 这有一个大哥写的也很明白,感觉好的办法被海一样的信息淹没了,也帮他给个链接

    2024年02月16日
    浏览(41)
  • QT中treeWidget组件动态添加节点,删除节点,

    QT中treeWidget组件动态添加节点,删除节点, 2.1QT 5.14.1 新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。 QT编译器采用的是MSVC2017 64bit。 链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234 2.3 Visual studio 20

    2024年02月05日
    浏览(42)
  • Qt、C++动态UI

    在项目实践中,最简单的更新应用UI交互的方式就是更新整个安装包。 随着业务的发展,一个客户端需要同时适配多种业务,每种业务都有自己独特的设置页,业务之间又较为独立。如果将这些UI页面、业务代码都在一份代码上维护,加各种条件分支,维护会越来越困难:容

    2024年02月03日
    浏览(46)
  • QT子线程或自定义类操作访问主界面UI控件的几种方法

            QT创建窗体工程,一般在MainWindow或Dialog类里可以直接通过ui指针访问控件,但是添加新的类后又如何访问呢,可以通过以下几种方式: (1)例如有个自己定义的类CustomClass,在自定义类里包含主界面指针MainWindow * class MainWindow;   class CustomClass { public:     CustomCla

    2024年02月09日
    浏览(59)
  • 【[Qt]基于QChartView开发的图表显示控件,支持实时显示,动态更新,支持鼠标交互等操作】

    十字线和显示坐标实现 在.h文件中定义十字线lineitem变量和坐标textitem变量 在Cpp文件中初始化 然后定义鼠标事件,在鼠标进入时显示,移出时隐藏,移动时显示。 其他实现请参考具体代码 ChartDrawer.h文件 ChartDrawer.cpp 文件 具体使用代码如下 1、初始化类对象,并加入界面布局

    2023年04月23日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包