Qt 中 QWidget 调用setLayout 后不显示

开发过程中,自己创建了一个QVBoxLayout 对象以后,调用 QWidget 的 setLayout 方法,将这个Layout 对象应用到窗口中,运行后没有显示添加的控件。

QWidget 已有布局,新设置的无效,解决方法如下:

1 获取 QWidget 布局 QLayout;

2 删除 布局中的控件和布局

3 重新添加布局和控件

示例如下:

复制代码
    // step 1
    QLayout *delLayout = ui->widgetCustom->layout();

    // step 2
    if (delLayout)
    {
        // qDeleteAll(this->findChildren<QObject*>()); // error
        // delLayout->deleteLater();
        // delLayout = nullptr;

        QLayoutItem* item;
        while ((item = delLayout->takeAt(0)) != nullptr)
        {
            if (QWidget* widget = item->widget())
            {
                widget->hide();
                widget->deleteLater();
            }
            delete item;
        }

        delete delLayout;
    }

    // step 3
    m_vBoxlayout = new QVBoxLayout();
    m_btn1 = new QPushButton();
    m_vBoxlayout->addWidget(m_btn1);
    ui->widgetCustom->setLayout(m_vBoxlayout);
相关推荐
不绝191几秒前
C#进阶:预处理指令/反射,Gettype,Typeof/关键类
开发语言·c#
无小道6 分钟前
Qt-qrc机制简单介绍
开发语言·qt
zhooyu13 分钟前
C++和OpenGL手搓3D游戏编程(20160207进展和效果)
开发语言·c++·游戏·3d·opengl
HAPPY酷16 分钟前
C++ 和 Python 的“容器”对决:从万金油到核武器
开发语言·c++·python
大鹏说大话16 分钟前
告别 MSBuild 脚本混乱:用 C# 和 Nuke 构建清晰、可维护的现代化构建系统
开发语言·c#
Mr_sun.38 分钟前
Day09——入退管理-入住-2
android·java·开发语言
MAGICIAN...1 小时前
【java-软件设计原则】
java·开发语言
gpfyyds6661 小时前
Python代码练习
开发语言·python
CodeKwang1 小时前
Qt实战:简易Excel表格 | 附完整源码
qt·excel·qtabwidget·qt控件
盐真卿1 小时前
python第八部分:高级特性(二)
java·开发语言