QT 正确删除Layout

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

前言:QT中以代码的方式设置布局的函数是 *void QWidget::setLayout(QLayout *layout)*但是没有提供直接删除布局的函数。在删除布局时应该注意内存泄漏的问题。下面的方法仅供参考。

    QLayoutItem *item;
    if(this->layout() != nullptr)
    {
        while((item = this->layout()->takeAt(0)) != nullptr)
        {
            delete item->widget();
            delete item;
        }
        delete this->layout();
    }

参考文档takeat函数
以下是主要工程代码
widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "mypushbutton.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    sonWidget = new QWidget;
    QPushButton *sonButton = new QPushButton(sonWidget);
    sonWidget->hide();
    myPushButton *button1 = new myPushButton;
    button1->setText(QStringLiteral("按钮1"));
    connect(button1, &QPushButton::clicked, this, [=](){
        qDebug() << QStringLiteral("按钮1被点击");
    });
    myPushButton *button2 = new myPushButton;
    button2->setText(QStringLiteral("按钮2"));
    QVBoxLayout *box = new QVBoxLayout;
    box->addWidget(button1);
    box->addWidget(button2);
    this->setLayout(box);
    connect(button2, &QPushButton::clicked, this, [=](){
        sonWidget->show();
    });
    connect(sonButton, &QPushButton::clicked, this, &Widget::slot_sonButton);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::slot_sonButton()
{
    QLayoutItem *item;
    if(this->layout() != nullptr)
    {
        while((item = this->layout()->takeAt(0)) != nullptr)
        {
            delete item->widget();
            delete item;
        }
        delete this->layout();
    }
    QHBoxLayout *box = new QHBoxLayout;
    myPushButton *button = new myPushButton;
    box->addWidget(button);
    this->setLayout(box);
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void slot_sonButton();

private:
    Ui::Widget *ui;
    QWidget *sonWidget;
};

#endif // WIDGET_H

mypushbutton.cpp文章来源地址https://www.toymoban.com/news/detail-640652.html

#include "mypushbutton.h"

myPushButton::myPushButton(QWidget *parent) : QPushButton(parent)
{

}

myPushButton::~myPushButton()
{
    qDebug() << QStringLiteral("按钮被析构");
}

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

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

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

相关文章

  • Qt布局管理(布局控件)

    实际开发中,一个界面上可能包含十几个控件,手动调整它们的位置既费时又费力。作为一款成熟的 GUI 框架,Qt 提供了很多摆放控件的辅助工具(又称布局管理器或者布局控件),它们可以完成两件事: 自动调整控件的位置,包括控件之间的间距、对齐等; 当用户调整窗口

    2024年02月04日
    浏览(37)
  • 【QT学习二】Qt Design中使用Qt的基本布局

    目录 概述 Qt Design中使用Qt的基本布局 控件在哪? 怎么使用? 直接拖拽布局控件 使用工具栏 Layout的属性 在我们使用Qt做界面设计时,为了界面的整洁美观,往往需要对界面中的所有控件做一个有序的排列,以及设置各个控件之间的间距等等,为此Qt为界面设计提供了基本布

    2024年02月08日
    浏览(41)
  • 【Qt】盒子布局、网格布局、表单布局和堆栈布局

    QBoxLayout可以在水平方向或垂直方向上排列控件,分别派生了QHBoxLayout、QVBoxLayout子类。 QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。 QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。 水平布局、垂直布局除了构造时的方向(LeftToRight、TopToBotto

    2024年02月06日
    浏览(42)
  • 我的Qt作品(18)模仿Qt Creator IDE写了一个轻量级的视觉框架

    Qt Creator的源码比较庞大。前几年我陆陆续续读过里面的源码。也写了几篇博文: https://blog.csdn.net/libaineu2004/article/details/104728857 https://blog.csdn.net/libaineu2004/article/details/89407333 最近一直想找机会,借用这个IDE的皮,来写一个视觉框架的小demo。 1、先来看看官方Qt Creator IDE的主界

    2023年04月24日
    浏览(37)
  • Visual Studio Qt Qt-Advanced-Docking-System 新建停靠窗口+布局记录+布局载入

    最近在使用visual studio 2022和qt开发项目时,涉及到制作大数据可视化界面的工作。 为了完成这一功能,查询了现有的实现方案,最终选择使用:Qt-Advanced-Docking-System 作为布局方案的实现方式。 此时,就遇到几个问题: 如何下载Qt-Advanced-Docking-System 如何在visual studio中载入Qt-

    2024年02月09日
    浏览(48)
  • 『PyQt5-Qt Designer篇』| 06 Qt Designer中水平布局和垂直布局的使用

    拖动几个按钮: 选中这几个按钮, 右键-布局-水平布局 : 可以看到按钮间隔等宽水平排列:

    2024年02月10日
    浏览(45)
  • Qt栅格布局的示例

    这样写程序会崩溃的: 因为QLabel的生存周期太短了。

    2024年04月13日
    浏览(39)
  • qt登录界面布局

    qt个人小笔记 1、主体布局 其中用户名和密码都是label标签: 用户名和密码后面的输入框都是linedit标签: 下方的登录和退出按钮都是push button标签: 2、水平操作: 将这些东西添加完成以后,要保证用户名与后面的数入框水平,密码与后面的输入框水平,登录和推出按钮水平

    2024年02月03日
    浏览(39)
  • QT界面布局和设计

    2024年02月12日
    浏览(47)
  • Qt - 控件和布局

    https://www.bilibili.com/video/BV1g4411H78N?p=6 添加控件到窗口,需要添加内容到 mywidget.cpp 按钮控件常用API 创建 QPushButton * btn = new QPushButton 设置父亲 setParent(this) 设置文本 setText(\\\"文字\\\") 设置位置 move(宽,高) 重新指定窗口大小 resize 设置窗口标题 setWindowTitle 设置窗口固定大小 setFixed

    2024年02月16日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包