我是一名学生程序员,使用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);
}
答案 0 :(得分:1)
如果您需要知道选择了哪些项目,可以使用
QList<QTreeWidgetItem *> QTreeWidget::selectedItems() const
获取树中所有当前所选项目的列表。
然后你可以为列表中的每个项调用你的函数一次,或者你可以重载你的函数作为参数QList<QTreeWidgetItem *>
,然后运行调用函数内的列表。