销毁QHBoxLayout

时间:2011-06-27 12:01:06

标签: c++ linux qt

你好这里有一个是我的代码我在我的按钮事件处理程序中调用所有这些语句,就像这个

void analysis::on_pushButton_clicked()
{
 myplot * p = new myplot(gao.structpayloadgraph,gao1.structpayloadgraph, gao.structcol-2, "payload");

    myplot * p1 = new myplot(gao.structsessiongraph,gao.structsessiongraph ,gao.structcol-2, "session");


  QHBoxLayout * layout = new QHBoxLayout;
 ui->horizontalLayout_2->addLayout(layout);
 layout->addWidget(p);
 layout->addWidget(p1);

}

myplot是图表绘图类 但问题是,每次我点击按钮时,新图形会出现,之前仍然存在,就像一个!第二个点击2出现在第二个它们变为4然后是6 ...... 如何在我的按钮事件处理程序中销毁QHBoxLayout

谢谢

3 个答案:

答案 0 :(得分:0)

尝试只创建一个布局,每次点击后尝试执行类似这样的布局 - > removeWidget(...);删除prew graph。

答案 1 :(得分:0)

layout功能设置on_pushButton_clicked()全局。

然后从中删除所有以前的小部件:

    QLayoutItem *item;
    QLayoutIterator it = layout->iterator();

    while((item = it.takeCurrent()) != 0) {
        layout->remove(item->widget());
        delete item->widget();
    }

之后您可以添加小部件:

    layout->addWidget(p);
    layout->addWidget(p1);

<强> UPD: 仅适用于Qt3Support模式。

<强> UPD2:

    QLayoutItem *tItem;
    while (tItem = layout->takeAt(0) != 0)
        delete tItem;

答案 2 :(得分:0)

你应该做点什么:

你班上的


class analysis{

private: ... QHBoxLayout* hLayouot; ...

public: ... };

在构造函数中,您必须创建对象:

hLayout = new QHBoxLayout(this);
- &gt;如果你不能把'this'放在构造函数上因为你的类没有来自QWidget,你必须删除析构函数中的hLayout!

在您的方法void analysis::on_pushButton_clicked()中,您可以致电

hLayout->removeWidget()
.. 我也遇到了从布局中删除的问题:所以我调用hLayout-&gt; clear()然后重新插入对象!