1

私は現在、Qtを使用して職場でGUIインターフェースを構築している学生プログラマーであり、現在、QTreeWidgetItemのQtドキュメントで解決策を見つける際に問題が発生しています。現在、のインスタンスを編集、削除、およびコピーするためのボタンを備えたインターフェイスがありますQTree。私のツリーがどのように配置されているかを理解することが重要かもしれません。に表示されるアイテムはQTree、この方法でベクトルから動的に追加されます。

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(item selected)を削除し、ID列を再割り当てすることです。各インスタンスにはこの列の番号が割り当てられているためです。私はこの投稿を見ていました、3年前に投稿されました。しかし、それはほとんど、私がすでにレビューしているドキュメントを参照しているだけです。さらに、他の回答は正しい方向に進んでいるように見えるため、選択された回答は非常に決定的ではないようです。私は、この答えが私の目の前にあるかもしれないことを理解しています。しかし、私が言えることは、noobsはnoobsになり、実装を理解するのに苦労しています。私はこのタスクの学習と達成にのみ興味があるので、生産的なフィードバックのみを残してください。よろしくお願いします。

4

1 に答える 1

2

を取得しselectionModel、次に選択したインデックスを取得して、それらを反復処理する必要があります。

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

selectionModelにありQAbstractItemModelます。C++11に注意してくださいauto

于 2012-01-23T17:03:11.737 に答える