首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt布局/ Widget交互-布局中的布局

Qt布局/ Widget交互-布局中的布局
EN

Stack Overflow用户
提问于 2011-05-11 11:36:48
回答 1查看 555关注 0票数 0

我在QT4.7中有一个接口,我很难按照自己的意愿行事。

所需行为的基本描述:用户在组合框中进行选择,这将导致查询转到另一个函数,该函数返回通常包含多个标签、行编辑等的QHBoxLayout对象。这将调整界面上布局的内容,以删除先前的选择,并添加新的详细信息。

实际发生的情况:新的布局出现了,但旧的布局仍然存在,所以它们互相吸引,造成了混乱。

这是currentIndexChanged信号链接到的时隙的代码:

代码语言:javascript
复制
void updateAxisLabels(const QString & value)
{
  if ( m_current != "" )
  {
    QHBoxLayout* xOld = m_transforms[m_current]->xAxis();
    m_uiForm.layoutXAxis->removeItem(m_transforms[m_current]->xAxis());
    delete m_transforms[m_current]->xAxis();
    m_transforms[m_current]->init();
  }

  m_uiForm.layoutXAxis->addLayout(m_transforms[value]->xAxis());
  m_current = value;

  m_uiForm.layoutXAxis->update();
}

这里,m_transforms是一个映射,它用xAxis()函数将组合框的内容链接到一个对象(返回一个QHBoxLayout*),以及一个init()函数,当它被删除时将重新创建布局。m_current只是一个QString,我用它来告诉我需要删除哪一个。

我删除它的原因:因为这是半个小时的谷歌让我相信这是正确的事情。

任何帮助都很感激。:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-11 19:59:41

我以前做过这样的事情,您肯定不仅从布局中删除了小部件,而且还删除了它。

通常,当我这样做时,我会创建一个布局,特别是用于托管我的小部件。这样我就可以从布局中删除所有东西,而不必担心其他可能存在的问题。

下面是循环遍历布局中所有项并删除它们的推荐方法。

代码语言:javascript
复制
QLayoutItem *child;
 while ((child = m_uiForm.layoutXAxis->takeAt(0)) != 0) 
 {
     delete child;
 }

因此,在删除之前,您可以调用任何想要进行的清理。

您还可以调用layout ->removeWidget(您的小部件)或layout->removeItem(布局)来从布局中删除一个特定的东西。但你得小心点。医生说:

从布局中删除小部件。在这个调用之后,调用方有责任给小部件一个合理的几何图形,或者把小部件放回布局中。

因此,您希望确保之后也删除该小部件,以确保它不会显示在任何地方。

但是,这种方法的另一个问题是,如果要插入/删除的小部件/布局位于布局中其他小部件的中间,那么尝试在正确的位置替换它会很有趣。

这就是为什么我通常尝试创建一个专门用于此目的的布局,其中没有任何其他内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5963569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档