Как изменить родительский элемент QTreeWidget

#python #pyqt

#python #pyqt

Вопрос:

Как мне изменить родительский элемент QTreeWidget элемента?

Комментарии:

1. @eyllanesc здесь я случайно забыл слово. Я исправил это

Ответ №1:

Процесс является:

  • Получите номер строки элемента с помощью indexOfChild() .
  • Удалите элемент из родительского элемента с помощью takeChild() , передав индекс.
  • Добавьте элемент к новому родительскому элементу.

В следующем примере элементы, являющиеся дочерними элементами первой ветви, перемещаются во вторую ветвь.

 import sys
from PyQt5 import QtCore, QtGui, QtWidgets

if __name__ == '__main__':

    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QWidget()
    button = QtWidgets.QPushButton("Press me")
    tree_widget = QtWidgets.QTreeWidget()
    for i in range(2):
        it = QtWidgets.QTreeWidgetItem(tree_widget.invisibleRootItem(),["{}".format(i)])
        for j in range(4):
            child_item = QtWidgets.QTreeWidgetItem(it, ["{}-{}".format(i, j)])
    tree_widget.expandAll()
    lay = QtWidgets.QVBoxLayout(w)
    lay.addWidget(button)
    lay.addWidget(tree_widget)

    def change_parent(item, new_parent):
        old_parent = item.parent()
        ix = old_parent.indexOfChild(item)
        item_without_parent = old_parent.takeChild(ix)
        new_parent.addChild(item_without_parent)

    @QtCore.pyqtSlot()
    def on_clicked():
        it = tree_widget.topLevelItem(0)
        if it.childCount() > 0:
            child_item = it.child(0)
            new_parent = tree_widget.topLevelItem(1)
            change_parent(child_item, new_parent)

    button.clicked.connect(on_clicked)
    w.show()
    sys.exit(app.exec_())
  

Комментарии:

1. Спасибо. Этот ответ был очень полезен. Для C : auto old_parent = this->parent(); if (old_parent != NULL) { auto ix = old_parent->indexOfChild(this); auto item_without_parent = old_parent->takeChild(ix); top-> addChild(item_without_parent); }