2012-01-23 3 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, так что я могу иметь его удалены из вектора. Мой psuedo должен определить, какая строка была выбрана, подтвердить удаление, удалить itemAt (выбранный элемент), переназначить столбец идентификатора; потому что каждому экземпляру присваивается номер в этом столбце. Я искал этот post, размещенный три года назад; но в основном это относится только к документации, которую я уже рассматривал. Кроме того, ответ, который был выбран, кажется крайне неубедительным, поскольку другой ответ, похоже, был на правильном пути. Я понимаю, что этот ответ может быть прямо передо мной; но что я могу сказать, noobs будет noobs, и мне трудно понять реализацию. Пожалуйста, оставляйте только продуктивную обратную связь, так как меня интересует только изучение и выполнение этой задачи. Заранее спасибо.

ответ

3

Вы должны получить selectionModel, то выбранные индексы, а затем перебрать их:

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

selectionModel в QAbstractItemModel. Обратите внимание на C++ 11 auto.

+0

Im давая это попробовать сейчас; возможно, вместо этого я должен иметь независимый оператор соединения для возврата выбранного элемента, чтобы я мог повторно использовать другие функции? –

+1

@WylieCoyoteSG. Пожалуйста, просветите меня. Что такое 'независимый оператор связи'? – pmr

+0

У меня есть кнопки для каждой функции, которую я хотел бы использовать, удалять, копировать и редактировать. У каждого из них будет инструкция на соединение, но, возможно, мне нужно иметь еще одну инструкцию соединения для виджета дерева. Элемент щелкнул/выбрал? Кое-что больше похоже на connect Item Выбранный для функции указателя, который возвращает указатель на выбранный элемент. затем с помощью команд со связью копировать, редактировать и удалять. Возьмите * Выбранный пункт и сделайте что-нибудь. –

Смежные вопросы