2

我是一名学生程序员,使用 Qt 为工作构建 GUI。我遇到了一个问题;QTreeWidget 中的多个选择或多或少和不便。我的 GUI 有一个主界面,其中 QTreeWidget 作为该窗口的中心项目。在 QTreeWidget 下面我有几个按钮;复制、编辑和删除。正如您可能已经猜到的那样,这些按钮中的每一个都与执行命令的函数相关联。我的树小部件能够选择多个项目;however, when multiple items are selected the only item that is passed through is the last item that was selected. 我希望对这个 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 网站上的文档后,我仍然不确定如何更改它以允许通过该函数传递多个选择。请仅提供建设性反馈;我只对学习和完成解决方案感兴趣。提前致谢。

更新!解决了!!!只是认为展示一下实现的样子可能会很好:

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

拥有树中所有当前选定项目的列表。然后你可以为列表中的每个项目调用一次你的函数,或者你可以重载你的函数以作为参数 aQList<QTreeWidgetItem *>然后在被调用函数内遍历列表。

于 2012-01-27T16:51:38.193 回答