销毁 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 集群并且失败了
当组件被销毁时,Angular 如何销毁事件处理程序和属性绑定