销毁 QHBoxLayout

Posted

技术标签:

【中文标题】销毁 QHBoxLayout【英文标题】:destroy QHBoxLayout 【发布时间】:2011-06-27 12:01:05 【问题描述】:

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

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 是绘图类 但问题是,每次我单击按钮时,都会出现新图形,而以前的图形仍然存在,就像一个!st click 2 出现在第二个它们变成 4 然后 6 ...... 如何在我的按钮事件处理程序中

谢谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

这就是我要问的问题,就像我不知道 Qt 函数一样【参考方案2】:

使您的 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);

统一更新: 仅适用于Qt3Support 模式。

UPD2:

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

【讨论】:

先生,它说 QLayoutIterator 不是类型名称,尽管我已经包含了 #include"QLayoutIterator" 类 哦,对不起。我从旧的 qt3 代码中粘贴了它。您可以使用 Qt3Support 模块或使用layout->remove(p) 代替迭代。 好的,先生,但问题仍然存在,我应该在哪里写 remove(p)。因为每次点击都会创建新布局,所以我需要删除该布局我猜我应该怎么做 我会避免使用 Qt3 的东西,因为在下一个版本中它会被忽略,所以这意味着它会停止编译。 是的,推荐“qt3 支持层”作为 Qt4 应用程序的解决方案是......讨厌......【参考方案3】:

你应该这样做:

在你的课堂上:


class analysis

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

public: ... ;

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

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

在你的方法void analysis::on_pushButton_clicked()你可以调用

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

【讨论】:

以上是关于销毁 QHBoxLayout的主要内容,如果未能解决你的问题,请参考以下文章

在 Terraform 销毁期间,terraform 在销毁 Auto-scaling 组之前尝试销毁 ECS 集群并且失败了

如何在组件销毁时销毁反应式 FormControl?

销毁对象在java中怎么用

当组件被销毁时,Angular 如何销毁事件处理程序和属性绑定

(统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?

Activity的销毁