簡體   English   中英

從布局中刪除QLayoutItem,但以后仍然使用嗎?

[英]Remove QLayoutItem from a Layout, but still use it later on?

首先是環境:我有一個自定義的“屬性編輯器”,它是QGroupBox(來自QWidget的派生類)。目前,我有一個類稱為“ Holder”,它引用了兩個屬性編輯器。

現在,我有多個“ Holder”類和一個垂直QVBoxLayout(稱為“邊欄”)。 在此布局中,我希望顯示當前選定的Holder類的兩個屬性編輯器。

問題是:當用戶選擇另一個Holder類時,我希望先前選擇的Holder類的屬性編輯器消失,並添加新選擇的Holder類的屬性編輯器。

選擇另一個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 ,隱藏項不會在布局中產生孔,顯示下一個可見項,就好像隱藏項不在布局中,或者
  • 使用QStackedWidget將所有PropertyEditor堆疊在同一位置,然后選擇顯示哪個(使用QStackedWidget::setCurrentIndex() )。

“ takeAt(..)”會銷毀holder類中的引用嗎?

不,此方法從布局中刪除QLayoutItem。 請參見參考頁上的takeAt 此類不會釋放布局項目(這是您的責任)。

但是當我再次選擇第一個Holder類時,編輯器似乎沒有變化。 為什么?

我不清楚您要實現的目標(示例中的代碼不足),但是如果您嘗試使用QLayoutItem更改布局,那么創建新的布局並添加要顯示的項目是最簡單的。 或者簡單地,從布局中刪除所有項目,然后添加應該可見的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM