QT关于Qlayout动态替换其中的widget
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT关于Qlayout动态替换其中的widget相关的知识,希望对你有一定的参考价值。
在layout中存在n个widget,在如何动态替换其中一个widget...望大婶们指教方法或贴代码,急得冒烟。
可以写一个拖拽事件 Qt自带的例子里有一个dragdropROBOT的例子 可以看看里面的拖拽的简单实现简单的话 自己写槽函数 比如将你的widget添加到一个Qlist 然后调用槽函数 删除 添加都可以了 参考技术A 可以将不需要的delete掉追问
可以del,但我想要的是如何替换…或用另一个widget刷新.
追答你delete一个后再往这个layout中add就行
从 QLayout 中删除 QWidgets?
【中文标题】从 QLayout 中删除 QWidgets?【英文标题】:Remove QWidgets from QLayout? 【发布时间】:2015-09-01 14:12:37 【问题描述】:我用我在运行时创建的QWidget
对象动态填充我的QVBoxLayout
。我也想在运行时删除它们,但是如何删除呢?
我可以一个一个移除小部件:
void QLayout::removeWidget(QWidget * widget)
我可以以某种方式遍历布局吗?
【问题讨论】:
我不明白你的问题是什么。removeWidget
有什么问题?
@Jérôme 我将多个 QWidget 放入该布局中,但我不记得它们。我想全部删除。
【参考方案1】:
条条大路通罗马 ;)
Qt documentation of QLayout::takeAt
声明:
以下代码片段显示了一种从 布局:
QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) ... delete child;
要同时删除托管小部件,您只需添加一行:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0)
...
delete child->widget();
delete child;
【讨论】:
【参考方案2】:有一个 count
方法返回存储的小部件的数量,还有一个 itemAt()
方法,给定一个索引,它返回指向相关存储小部件的指针。您可以检索所有指针,然后将其删除。您应该首先检索所有指针,因为如果您在计数时删除一个,那么存储的小部件的数量会在迭代期间发生变化。
itemAt()
使用widget
检索小部件本身的方法检索QLayoutItem
。
while (layout->count() != 0)
QLayoutItem *item = layout->itemAt(0);
layout->removeWidget(item->widget());
【讨论】:
以上是关于QT关于Qlayout动态替换其中的widget的主要内容,如果未能解决你的问题,请参考以下文章