gpt4 book ai didi

c++ - 从布局中删除 QLayoutItem,但以后仍然使用它?

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

这里先说环境:我有一个自定义的“属性编辑器”,它是一个 QGroupBox(派生自 QWidget)目前我有一个类,我们称之为“Holder”,它引用了两个属性编辑器。

现在我有多个“Holder”类和一个垂直 QVBoxLayout(称为 Sidebar)。在此布局中,我希望显示当前选定的 Holder 类的两个属性编辑器。

还有一个问题:当用户选择另一个 holder 类时,我希望之前选择的 Holder 类的 Property Editors 消失,并添加新选择的 Holder 类的 Property Editors。

选择另一个 Holder 类只工作一次。但是当我再次选择第一个 Holder 类时,编辑器似乎没有改变。为什么? “takeAt(..)”是否会破坏 holder 类中的引用?如何获得所需的行为?

这是代码,在此先感谢:

void App::setSelection(Holder * holder){
if(m_currentlySelected == holder) return;

m_viewer->sideBarRemoveAt(0);
m_viewer->sideBarInsertAt(0, holder->firstPropEditor);
m_viewer->sideBarRemoveAt(1);
m_viewer->sideBarInsertAt(1, holder->secondPropEditor);

m_currentlySelected = holder;
}

void QtViewer::sideBarRemoveAt(int i){
m_sideBar->m_layout->takeAt(i);
}

void QtViewer::sideBarInsertAt(int i, QWidget * widget){
m_sideBar->m_layout->insertWidget(i, widget);
}

最佳答案

QLayout::takeAt() 不会从其父小部件中删除 QLayoutItem 的小部件。它似乎第一次工作的唯一原因可能是因为其他小部件高于(z-index 明智的)第一个小部件。

与其摆弄布局,不如

  • 只需隐藏/显示您的 2 PropertyEditor 每当 holder 发生变化时,隐藏项不会在布局中产生空洞,显示下一个可见项,就好像隐藏项不是布局的一部分一样, 或
  • 使用 QStackedWidget 将所有 PropertyEditor 堆叠在同一位置并选择显示哪一个(使用 QStackedWidget::setCurrentIndex() ).

关于c++ - 从布局中删除 QLayoutItem,但以后仍然使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552568/

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