0
崩潰我使用QTreeWidget:ExtendedSelection與QTreeWidget上刪除
mTreeWdg->的setSelectionMode(QAbstractItemView中:: ExtendedSelection);
mTreeWdg-> setSelectionBehavior(QAbstractItemView :: SelectRows);
並具有刪除樹中所有選定項目的功能。當我點擊每一個,它工作正常。但是,當我通過先點擊選擇項目,結束然後最後一個項目,它刪除第一個,然後崩潰。
OnBtnClickedDelete(){
QList<QTreeWidgetItem* > list = mTree->selectedItems();
QList<QTreeWidgetItem*>::iterator it;
for(it=list.begin(); it!= list.end(); it++)
{
try
{
QTreeWidgetItem* current_item=*it;
if(current_item != 0)
{
int ind=current_item->data(0,Qt::UserRole).toInt();
if(ind > 0)
{
if(MyMessageBox(
tr("Are you sure you want to " \
"delete this ?"),
QMessageBox::Question,
QMessageBox::Yes | QMessageBox::No)==QMessageBox::Yes)
{
mPro.mDelete(ind-1);
mSth.Clear();
this->RefreshTree();
EnableAllControls(false);
if(this->mTree->topLevelItemCount() == 1)
{
EnableButtons(FALSE);
set_enabled(mButtonGenerate,true);
set_enabled(mButtonNew,true);
}
}
}
}
}
catch (std::exception& e)
{
default_exception_handler(e);
}
}}}
是什麼MPRO?和mSth?當然,如果你改變QTreeWidget層次結構('this-> RefreshTree()'),當前迭代器變得無效...也許你需要一個「休息」 – eferion
但爲什麼這個工程時,我用鼠標單擊多個項目?如果我點擊3個不同的項目,它將刪除所有這些項目。 – user2944505
嘗試將RefreshTree和下面的行放在循環之外。迭代時不要刷新樹小部件。如果你不想刪除沒有刪除的樹,使用bool變量。 – eferion