我在QT4.7中有一个接口,我很难按照自己的意愿行事。
所需行为的基本描述:用户在组合框中进行选择,这将导致查询转到另一个函数,该函数返回通常包含多个标签、行编辑等的QHBoxLayout对象。这将调整界面上布局的内容,以删除先前的选择,并添加新的详细信息。
实际发生的情况:新的布局出现了,但旧的布局仍然存在,所以它们互相吸引,造成了混乱。
这是currentIndexChanged信号链接到的时隙的代码:
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,我用它来告诉我需要删除哪一个。
我删除它的原因:因为这是半个小时的谷歌让我相信这是正确的事情。
任何帮助都很感激。:)
发布于 2011-05-11 19:59:41
我以前做过这样的事情,您肯定不仅从布局中删除了小部件,而且还删除了它。
通常,当我这样做时,我会创建一个布局,特别是用于托管我的小部件。这样我就可以从布局中删除所有东西,而不必担心其他可能存在的问题。
下面是循环遍历布局中所有项并删除它们的推荐方法。
QLayoutItem *child;
while ((child = m_uiForm.layoutXAxis->takeAt(0)) != 0)
{
delete child;
}因此,在删除之前,您可以调用任何想要进行的清理。
您还可以调用layout ->removeWidget(您的小部件)或layout->removeItem(布局)来从布局中删除一个特定的东西。但你得小心点。医生说:
从布局中删除小部件。在这个调用之后,调用方有责任给小部件一个合理的几何图形,或者把小部件放回布局中。
因此,您希望确保之后也删除该小部件,以确保它不会显示在任何地方。
但是,这种方法的另一个问题是,如果要插入/删除的小部件/布局位于布局中其他小部件的中间,那么尝试在正确的位置替换它会很有趣。
这就是为什么我通常尝试创建一个专门用于此目的的布局,其中没有任何其他内容。
https://stackoverflow.com/questions/5963569
复制相似问题