QTreeWidget Передача нескольких элементов (более одного выбора) через функцию
Я студент-программист, использующий Qt для создания GUI для работы. Я столкнулся с проблемой; более или менее и неудобства с множественным выбором в QTreeWidget. Мой графический интерфейс имеет основной интерфейс с 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, я все еще не уверен, как бы я изменил это, чтобы позволить множественным выборам проходить через функцию. Пожалуйста, предоставьте только конструктивный отзыв; Я заинтересован только в изучении и достижении решения. Заранее спасибо.
ОБНОВИТЬ! РЕШИТЬ!!! Просто подумал, что было бы неплохо показать, как это выглядит реализованным:
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 *>
а затем запустить список внутри вызываемой функции.