Автоматическая сортировка при вставке в QTreeWidget

У меня есть QTreeWidget, в который я вставляю элементы, и пользователь может выбрать столбец для его сортировки. Когда элементы вставляются, они просто добавляются в конец вместо автоматической сортировки. Если я нажму на заголовок, чтобы переключиться между восходящим/нисходящим, он отсортирует текущие элементы.

Я подумал, что могу вызвать sortItems() и использовать столбец, возвращаемый из sortColumn(), но я не могу понять, как я могу увидеть, выполняет ли пользователь сортировку по возрастанию или по убыванию.

Я не беспокоюсь об эффективности этого, поэтому я не хочу ждать, пока вставки будут сделаны, а затем выполнять сортировку. Мне нужен отсортированный список в реальном времени.

Спасибо!


person staackuser2    schedule 25.04.2009    source источник


Ответы (2)


Если ваш виджет-дерево называется treeWidget, вы должны иметь возможность вызывать метод header() из родительского QTreeView QTreeWidget, а затем sortIndicatorOrder() из класса QHeaderView:

treeWidget->header()->sortIndicatorOrder()

При этом вы знаете текущий порядок сортировки пользователя и можете применить свою сортировку при вставке в соответствии с этим.

person Community    schedule 25.04.2009
comment
Спасибо, думаю, я просто проглядел эту функцию. Сейчас это работает. - person staackuser2; 25.04.2009

У меня нет настройки для тестирования, но, согласно документации, это должно вызывать сортировку по мере вставки элементов.

...
treeWidget.sortByColumn(0, Qt::AscendingOrder); // column/order to sort by
treeWidget.setSortingEnabled(true);             // should cause sort on add

Qt рекомендует не делать этого, так как это повлияет на производительность, и говорит, что вы должны включить сортировку после завершения всех добавлений. Надеюсь это поможет.

person Arnold Spence    schedule 25.04.2009
comment
+1 за указание на медлительность при сортировке при вставке. Обратите внимание, что это не имеет значения, если вы добавляете только 1 элемент за раз, а не партиями. - person Arnab Datta; 31.07.2012