2012-01-23 4 views
0

저는 현재 직장에서 GUI 인터페이스를 만들기 위해 Qt를 사용하는 학생 프로그래머입니다. 현재 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에서 선택한 어떤 항목을 찾을 수있는 방법이 필요합니다. 내 psuedo 어떤 행이 선택되었는지 확인, 삭제 확인, itemAt (항목이 선택됨), ID 열을 재 할당; 각 인스턴스에이 열의 숫자가 지정되어 있기 때문입니다. 3 년 전에 올린이 post을보고있었습니다. 하지만 대부분은 제가 이미 검토하고있는 문서를 다시 말합니다. 게다가, 다른 답변이 제대로 된 것 같아 선택한 대답은 매우 결정적으로 보입니다. 나는이 대답이 나 앞에서 바로 여기에 있음을 이해한다. 하지만 멍청한 멍청한 멍청한 놈들 일 수도 있고 구현을 이해하는 데 어려움을 겪고 있습니다. 이 작업을 배우고 수행하는 데 관심이있는만큼 생산적인 피드백을 남기십시오. 고맙습니다.

답변

3

는 그런 다음 선택한 인덱스를 selectionModel을 획득 한 다음 반복해야합니다

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

selectionModelQAbstractItemModel입니다. C++ 11 auto에 유의하십시오.

+0

Im 시도해보십시오. 어쩌면 내가 다른 항목을 위해 재사용 할 수 있도록 선택한 항목을 반환하는 독립적 인 연결 문을 가지고 있어야합니까? –

+1

@WylieCoyoteSG. 제발 저를 계몽하십시오. '독립 연결 문'이란 무엇입니까? – pmr

+0

나는 사용, 삭제, 복사 및 편집하려는 각 기능에 대한 버튼이 있습니다. 이들 각각은 connect 문을 가지지 만, 클릭 한 트리 위젯 Item에 대한 또 다른 connect 문을 가지고 있어야합니까? 뭔가 선택 항목을 선택한 항목에 대한 포인터를 반환하는 포인터 함수에 연결하는 것이 좋습니다. 그런 다음 복사, 편집 및 삭제에서 connect 문을 사용합니다. * 선택한 항목을 가져 가서 물건을하십시오. –

관련 문제