2012-01-23 79 views
0

我目前是一名學生程序員,他正在使用Qt構建一個GUI界面工作,我目前遇到了在Qt Documentation On the QTreeWidgetItem中找到解決方案的問題。我目前有一個界面,其中有編輯,刪除和複製我的QTree中的實例的按鈕。瞭解樹的填充方式對你來說可能很重要。 QTree中顯示的項目以這種方式從矢量動態追加。QTreeWidgetItem:如何獲取選定的項目?

void InjectionGUI::addInjections_Clicked() //creates a new instance of injections 
{ 
    InjectionDialog newAddInjectionDialog; //where my dialog opens for user input 
    InjectionData defaultValues; 
    newAddInjectionDialog.setData(defaultValues); 
      if(newAddInjectionDialog.exec() == QDialog::Accepted)//a check data returns either Accepted or rejected 
      { 
       qTableInjectionData.append(newAddInjectionDialog.transInjectionData); //this appends the valid data from the injection dialog to the vector qTableInjectionData 
       ui->injectionTreeWidget->clear(); 
       for (int i=0; i < qTableInjectionData.size(); i++) // here I add the data from the vector to the tree widget. 
        { 
        InjectionData temp = qTableInjectionData.at(i); 
         QString injectionType; 
         QString tmpStr; 
         int column = 0; 

         //need sorting solution(still working on this) 
         if(temp.particleInjectionActive == true) // this evaluates the injection types 
         { 
          if(temp.particleInjectionOrLiquidDroplets == true) 
          { 
           injectionType += "(LD)"; 
          } 
          else 
          { 
           injectionType += "(P)"; 
          } 
         } 
         if(temp.fluidInjectionActive == true) 
         { 
          injectionType += "(F)"; 
         } 
         QTreeWidgetItem *qTreeWidgetItemInjectionData = new QTreeWidgetItem(ui->injectionTreeWidget); //Here data is added into rows from each instance of injection dialog found in vector 
         qTreeWidgetItemInjectionData->setText(column++, tmpStr.setNum(i)); 
         qTreeWidgetItemInjectionData->setText(column++, temp.lineEditInjectionName); 
         qTreeWidgetItemInjectionData->setText(column++, injectionType); 
         qTreeWidgetItemInjectionData->setText(column++, tmpStr.setNum(temp.lineEditParitcleVelocity)); 
         qTreeWidgetItemInjectionData->setText(column++, tmpStr.setNum(temp.lineEditFluidVelocity)); 
         qTreeWidgetItemInjectionData->setText(column++, tmpStr.setNum(temp.lineEditParticleMassFlow)); 
         qTreeWidgetItemInjectionData->setText(column++, tmpStr.setNum(temp.lineEditFluidMassFlow)); 
         qTreeWidgetItemInjectionData->setText(column++, temp.lineEditComment); 
        } 
      } 
} 

現在我真的需要一種方法來找出用戶在QTree已經選擇哪個項目,這樣我可以把它從載體上刪除。我的工作是識別哪一行已被選中,確認刪除,刪除itemAt(選中項目),重新分配ID列;因爲每個實例都在此列中分配了一個數字。我正在翻看三年前發佈的post;但它大多隻是回顧我已經審查過的文檔。此外,選擇的答案似乎非常不確定,因爲其他答案似乎已走上正軌。我明白這個答案在我面前可能是正確的;但是我能說什麼呢,noobs會成爲noobs,我很難理解實現。請僅留下有用的反饋,因爲我只對學習和完成這項任務感興趣。先謝謝了。

回答

3

您需要獲得selectionModel,然後選定索引,然後在它們之間迭代:

treeWidget->selectionModel()->selection(); 
    auto idx = sel.indexes(); 
    foreach(auto index, idx) { 
    camModel_->removeRow(index.row()); 
    } 
} 

selectionModelQAbstractItemModel。請注意C++ 11 auto

+0

我現在給這個試試;也許我應該有一個獨立的連接語句來返回選擇的項目,以便我可以重用其他功能? –

+1

@WylieCoyoteSG。請賜教。什麼是「獨立連接語句」? – pmr

+0

我有我想要使用,刪除,複製和編輯的每個功能的按鈕。其中每個都會有連接語句,但也許我應該有另一個連接語句的樹構件項目點擊/選擇?更像連接項目選擇指針功能,它返回指向選定項目的指針。然後使用複製,編輯和刪除的連接語句。採取*項目選擇和做的東西。 –