QLayout 动态布局(如何清空布局)


例子就是qtdemo里面的动态布局的例子,详细代码就不具体列出了,这里主要讲下如何清空布局,以及遇到的问题及其解决办法。

核心代码:

 void Dialog::rotateWidgets()
 {
     Q_ASSERT(rotableWidgets.count() % 2 == 0);


     foreach (QWidget *widget, rotableWidgets)
         rotableLayout->removeWidget(widget);


     rotableWidgets.enqueue(rotableWidgets.dequeue());


     const int n = rotableWidgets.count();
     for (int i = 0; i < n / 2; ++i) {
         rotableLayout->addWidget(rotableWidgets[n - i - 1], 0, i);
         rotableLayout->addWidget(rotableWidgets[i], 1, i);
     }
 }

    通过队列来保存widget的列表,从而删除、添加到layout,原理很简单,但是很多人会遇到这样的问题,布局内的widget删除后并没有消失,这是怎么回事呢?

    API文档里提供了一种安全的删除layout中控件的方法:

    QLayoutItem *child;
    while ((child = layout->takeAt(0)) != 0) {
     ...
     delete child;
    }


    删除是执行了,但是widget仍然没有消失。。。

    最后还是找到办法了,http://www.qtcn.org/bbs/simple/?t15751.html

xtowx2009-02-24 13:43
我用delete后,程序老是报错,后来我在网上查到用Widget.setParent(None),然后再layout.removeWidget(Widget),就可以了。呵呵
    原文作者可能是疏忽,None应该是NULL,即widget->setParent(NULL);编译运行,OK! 非常高兴!


  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值