2012-01-27 14 views
0

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

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のウェブサイトからのドキュメントを見直した後も、私はこれを変更して複数の選択肢を関数に渡すことができるかどうかまだ分かりません。建設的なフィードバックのみを提供してください。私は解決策を学び、達成することにのみ興味があります。前もって感謝します。

UPDATE!ソルヴェット!!! はちょうどこれがどのように見えるかを示していいかもしれないと思っ実装:

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); 
} 

答えて

1

は、あなたが選択している項目を知る必要がある場合、あなたはすべての現在のリストを持っている

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

を使用することができます選択した項目をツリー内に表示します。 次に、リスト内のすべての項目に対して関数を1回呼び出すか、引数としてQList<QTreeWidgetItem *>を受け取り、呼び出された関数内のリストを実行するように関数をオーバーロードすることができます。

+1

そしてまたあなたのQTreeWidgetに 'setSelectionMode(QAbstractItemView ::複数選択)'を呼び出すことを忘れないでください。 – Neox