QTreeWidget通过函数传递多个项目(多一个选项)

时间:2012-01-27 16:45:07

标签: c++ qt vector qtreewidget qtreewidgetitem

我是一名学生程序员,使用Qt构建工作GUI。我遇到了一个问题;在QTreeWidget中有多种选择的或多或少和不便。我的GUI有一个主界面,QTreeWidget作为此窗口的中心项。在QTreeWidget下面我有几个按钮;复制,编辑和删除。正如您可能已经猜到的那样,这些按钮中的每一个都与执行命令的函数相关。我的树小部件可以选择多个项目;但是,当选择多个项目时,唯一传递的项目是所选的最后一个项目。我希望在这个IDE中有更多洞察力的人可能能够指出我正确的方向来完成这个。以下是执行其中一个函数时遵循的过程。

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 个答案:

答案 0 :(得分:1)

如果您需要知道选择了哪些项目,可以使用

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

获取树中所有当前所选项目的列表。 然后你可以为列表中的每个项调用你的函数一次,或者你可以重载你的函数作为参数QList<QTreeWidgetItem *>,然后运行调用函数内的列表。