QTreeWidget Передача нескольких элементов (более одного выбора) через функцию

Я студент-программист, использующий Qt для создания графического интерфейса для работы. Я столкнулся с проблемой; более или менее и неудобство с множественным выбором в 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);
}

person Wylie Coyote SG.    schedule 27.01.2012    source источник


Ответы (1)


Если вам нужно знать, какие элементы выбраны, вы можете использовать

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

чтобы иметь список всех выбранных в данный момент элементов в дереве. Затем вы можете вызвать свою функцию один раз для каждого элемента в списке, или вы можете перегрузить свою функцию, чтобы она принимала в качестве аргумента QList<QTreeWidgetItem *>, а затем запускала список внутри вызываемой функции.

person Pietro Lorefice    schedule 27.01.2012
comment
А также не забудьте вызвать setSelectionMode(QAbstractItemView::MultiSelection) в вашем QTreeWidget. - person Neox; 27.01.2012