gpt4 book ai didi

qt - 检查一个小部件是否在 Qt 布局中

转载 作者:行者123 更新时间:2023-12-03 03:40:20 25 4
gpt4 key购买 nike

如何检查小部件是否在布局中?我的布局可能包含或不包含该小部件。

  • 小部件名称:infoClient
  • 图层名称:verticalLayout_3

需要检查布局中是否存在该小部件,然后不要添加新的。
如果不存在,则添加一个新的。
怎么做?

void MainWindow::slotPush1()
{
if <there is no infoClient> ui->verticalLayout_3->addWidget(new infoClient(this));
}

最佳答案

几点:

  • 布局中小部件的父级是包含顶级布局的小部件
  • 布局可以嵌套。
  • 布局包含项目 ( QLayoutItem ),这些项目要么是布局(layout() 不为 null),要么是小部件(widget() 不为 null)。最后你就有了一个布局项树。

所以您需要从父窗口小部件(dfs,bfs)进行搜索。

bool checkWidgetInsideLayout(const QWidget* _someWidget){

return _someWidget != NULL &&
_someWidget->parent() != NULL &&
_someWidget->parent()->layout() != NULL &&
foundItem(_someWidget->parent()->layout(), _someWidget );
}

//clumsy dfs
bool foundItem(const QLayout* layout, const QWidget* _someWidget ){

for(int i = 0; i < layout->count(); i++){
QLayoutItem* item = layout->itemAt(i);
if(item->widget() == _someWidget )
return true;
if(item->layout() && foundItem(item->layout(), _someWidget) )
return true;
}
return false;
}

关于qt - 检查一个小部件是否在 Qt 布局中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12810063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com