我是一名学生程序员,使用 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);
}