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);
相关推荐
“AI国潮设计-小江”30 分钟前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
小刘在重生~2 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
爱吃巧克力的程序媛2 小时前
main.cpp注册 C++ 类到 QML 元对象系统
c++·qt
YYYing.2 小时前
【C++进阶系列 (二)】关于线程堆栈的那些事——函数调用过程
开发语言·c++·函数·线程堆栈
邪修king2 小时前
Re:Linux系统篇(十九):进程篇(八): 进程等待详解:wait/waitpid,僵尸进程到底该如何回收
java·开发语言
我爱写代码i3 小时前
SKAPP SK影视反编译详细教程+源码 含苹果端ipa
开发语言·javascript·ecmascript
键盘会跳舞3 小时前
【C++多线程】死锁诊断工具实战:从 Windows 到 Linux 的全链路排查
linux·c++·windows·死锁
吴声子夜歌3 小时前
Java扩展——OkHttp
java·开发语言·okhttp
啊阿狸不会拉杆3 小时前
《计算机网络-自顶向下方法》5.7 网络管理、SNMP和NETCONF/YANG 读书笔记
开发语言·计算机网络·php
长友cy3 小时前
Qt官方示例D-BusListNames阅读
开发语言