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的主要内容,如果未能解决你的问题,请参考以下文章

QT自定义布局示例有关Overlappig小工具无法编译

类QLayout和类QMainWindow Qt c++之间的继承

QLayout.replace 不替换

Qt - 如何控制 QLayout 中的小部件大小

qt 对话框扩展 缩放

QLayout 中的重叠小部件