2012-01-27 29 views
0

我是一名使用Qt構建工作GUI的學生程序員。我遇到了一個問題;或多或少地與QTreeWidget中的多種選擇進行排序。我的GUI在QTreeWidget的主界面中作爲此窗口的中心項目。在QTreeWidget下面,我有幾個按鈕;複製,編輯和刪除。正如你可能已經猜到這些按鈕中的每一個都與執行該命令的函數相關。我的樹小部件可以選擇多個項目;但是,當選擇多個項目時,唯一通過的項目是最後選擇的項目。我希望在這個IDE中有更多洞察力的人可能能夠指出我爲完成這個目標而採取的正確方向。這是執行其中一個功能時所遵循的過程。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的網站上查看文檔後,我仍然不確定如何更改此選項以允許通過該函數傳遞多個選擇。請僅提供建設性的反饋意見;我只對學習和完成解決方案感興趣。提前致謝。

更新!解決了!!! 只是認爲這可能是不錯的顯示這是什麼樣子實現:

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 

擁有的所有當前列表在樹中選定的項目。 然後,您可以爲列表中的每個項目調用一次函數,也可以將函數重載爲參數QList<QTreeWidgetItem *>,然後遍歷被調用函數中的列表。

+1

也不要忘記在你的QTreeWidget上調用'setSelectionMode(QAbstractItemView :: MultiSelection)'。 – Neox 2012-01-27 17:03:30