Как сохранить переупорядочение столбцов элементов заголовка с помощью функции перетаскивания в qt - PullRequest
0 голосов
/ 07 июля 2019

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

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

Отладочный код для печати текста каждого столбцав HeaderItem:

column_count = self.ui.treeWidget.headerItem().columnCount()
for ii in range(column_count):
    print(self.ui.treeWidget.headerItem().text(ii))

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

1 Ответ

0 голосов
/ 08 июля 2019

@ GM помог мне указать правильное направление в комментариях, чтобы обойти эту проблему.Первоначально я напрямую обращался к своему заголовку с помощью метода QTreeWidget::headerItem, но для получения логического индекса мне нужно было установить заголовок равным QHeaderView object.

Я создал QHeaderView, включил функцию его подвижных секций и установил его в качестве заголовка для моего QTreeWidget:

self.headerView = QtWidgets.QHeaderView(QtCore.Qt.Orientation.Horizontal)
self.headerView.setSectionsMovable(True)
self.ui.treeWidget.setHeader(self.headerView)

Затем, когда мне захотелось перебрать столбцы послебыло внесено изменение, я нашел текст каждого столбца, используя индекс столбца, возвращаемый QHeaderView::logicalIndex.

Модифицированный код отладки для циклического перемещения по столбцам и распечатки текстасекции столбцов после перемещены пользователем ниже:

column_count = self.headerView.count()
for ii in range(column_count):
    logical_index = self.headerView.logicalIndex(ii)
    print(self.ui.treeWidget.headerItem().text(logical_index))
...