#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); }