2012-02-14 41 views
0

我使用takeTopLevelItem之後,setItemWidget不成功。未顯示QCheckBoxQt:Re setItemWidget在使用後無用takeTopLevelItem

但是,如果我更新了m_pDrawBox的一點,那很好。

有什麼我失蹤?

我想實現類似變更控制屬性的東西。 QTreeWidget(m_pTreeProperty)將通過不同的控制進行更改。所以我需要將舊屬性重置爲新屬性QTreeWidget

這是我的代碼:

qtForm::qtForm(QWidget *parent, Qt::WFlags flags): QMainWindow(parent, flags) 
    { 
    ui.setupUi(this); 

    ui.m_pTreeProperty->setColumnCount(2); 
    QStringList lstStr; 
    lstStr.clear(); 
    lstStr.append("Property"); 
    lstStr.append("Value"); 
    ui.m_pTreeProperty->setHeaderLabels(lstStr); 

    QTreeWidgetItem* m_pDrawBoxItem  = new QTreeWidgetItem; 
    QCheckBox* m_pDrawBox    = new QCheckBox; 
    m_pDrawBoxItem->setText(0,"drawbox"); 

    ui.m_pTreeProperty->addTopLevelItem(m_pDrawBoxItem); 
    ui.m_pTreeProperty->setItemWidget(m_pDrawBoxItem,1,m_pDrawBox); 
    ui.m_pTreeProperty->takeTopLevelItem(0); 
    ui.m_pTreeProperty->addTopLevelItem(m_pDrawBoxItem); 
    --m_pDrawBox    = new QCheckBox; 
    --m_pDrawBoxItem->setText(0,"drawbox"); 
    ui.m_pTreeProperty->setItemWidget(m_pDrawBoxItem,1,m_pDrawBox); 
    } 

回答

0

takeTopLevelItem刪除QTreeWidgetItemQTreeWidget所以你必須保存並重新進行添加它。

QTreeWidgetItem *item = ui.m_pTreeProperty->takeTopLevelItem(0); 
ui.m_pTreeProperty->addTopLevelItem(item); 
+0

謝謝你的回答。但我認爲這是不對的。當我首先調用addTopLevelItem時,我發送一個成員指向它。 takeTopLevelItem將返回與成員點相同的地址。無論你的或我的使用,它是相同的地址,也不會成功。 – Kaleidos 2012-02-15 08:43:16