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

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


你可能感兴趣的:(QLayout 动态布局(如何清空布局))