2

私はQtを使用して仕事用のGUIを構築する学生プログラマーです。問題が発生しました。QTreeWidgetで複数の選択を行うと、多かれ少なかれ不便になります。私のGUIには、このウィンドウの中心的な項目としてQTreeWidgetを備えたメインインターフェイスがあります。QTreeWidgetの下にいくつかのボタンがあります。コピー、編集、および削除。ご想像のとおり、これらのボタンはそれぞれ、コマンドを実行する関数に関連しています。私のツリーウィジェットには、複数のアイテムを選択する機能があります。ただし、複数のアイテムが選択されている場合、通過するアイテムは最後に選択されたアイテムのみです。私は、このIDEについてもう少し洞察を持っている誰かが、これを達成するための正しい方向に私を向けることができるかもしれないことを望んでいました。これらの関数の1つが実行されるときに従うプロセスは次のとおりです。

void InjectionGUI::copyInjection_Clicked(QTreeWidgetItem *itemToCopy)
{
    InjectionData copyInjectionData;         //first use data from the tree widget row
    QString converter = itemToCopy->text(0); //to find the vector item that will be copied
    int id = converter.toInt();
    int nameNumber;
    copyInjectionData = qTreeInjectionData.at(id);
    qTreeInjectionData.append(copyInjectionData);
    buildTreeWidget();
}

void InjectionGUI::slotInjectionCopy()
{
    if(ui->treeWidgetInjections->currentItem() == 0)
    {
        QMessageBox invalidSelection;
        invalidSelection.setText("No row selected to copy");
        invalidSelection.setWindowTitle("Error");
        invalidSelection.exec();
    }
    else
    {
        copyInjection_Clicked(ui->treeWidgetInjections->currentItem());
    }
}

この変更を行うためにどのコードが関連するのかよくわかりません。したがって、誰かが見たい追加の構造がある場合は、リクエストしてください。私の問題または解決策は、現在のアイテムを使用している方法にあると確信しています。QtのWebサイトからドキュメントを確認した後、複数の選択を関数に渡すことができるようにこれをどのように変更するかはまだわかりません。建設的なフィードバックのみを提供してください。私は解決策を学び、達成することにのみ興味があります。前もって感謝します。

アップデート!解決しました!!! これが実装されたように見えることを示すのは良いかもしれないと思っただけです:

QList<QTreeWidgetItem *> items = ui->treeWidgetInjections->selectedItems();
for(int i = 0; i < items.size(); i++)
{
    QTreeWidgetItem *qTreeWidgetitem = new QTreeWidgetItem;
    qTreeWidgetitem = items.at(i);
    copyInjection_Clicked(qTreeWidgetitem);
}
4

1 に答える 1

2

どのアイテムが選択されているかを知る必要がある場合は、

QList<QTreeWidgetItem *> QTreeWidget::selectedItems() const

ツリーで現在選択されているすべてのアイテムのリストを表示します。次に、リスト内のすべての項目に対して関数を1回呼び出すか、関数をオーバーロードして引数aとして取りQList<QTreeWidgetItem *>、呼び出された関数内のリストを実行することができます。

于 2012-01-27T16:51:38.193 に答える