2015-08-05 9 views
0

Я пытаюсь построить интерфейс с 2 QTreeWidgets, который пользователь может перетащить \ удалить элементы между ними.PyQt - QTreeWidget - Ограничить глубину при перетаскивании

Я хочу, чтобы один виджет дерева имел только глубину 1 (перетаскивание элемента из любого виджета дерева, на вложенном элементе ничего не будет делать или желательно перемещать как родственный), а другой с глубиной 0 (ничего не делать \ двигайтесь как брат, если перетаскиваете элемент).

QtDesigner доставил мне большую часть пути, но я не могу понять, как ограничить (или установить вообще) глубину вложенных элементов.

Я до сих пор своего рода новичок в Qt (и PyQt ..), так что извините, если это очевидно ..

Цените любую помощь, вы можете предложить, спасибо.

+0

Unset 'Qt :: ItemIsDropEnabled' флаг с использованием' QTreeWidgetItem :: setFlags' для элементов, которые не должны использоваться в качестве целей снижения (т.е. предметов, которые не должны иметь детей, в вашем случае). –

+0

Спасибо, что ответили. Установка этих флагов отлично подходит для исходной иерархии, но после того, как я потерял родительский элемент или перетащил его в новый, который будет использоваться в качестве родителя, я получаю элемент, у которого не могут быть дети. Кроме того, я все еще могу отказаться родитель с его детьми в других родителях (я могу отключить перетаскивание для родителей, но потом я не могу удалить его дочерние элементы и использовать его как дочерний элемент в другом родителе или перетащить его на другой виджет дерева). Я предполагаю, что вы не можете получить это поведение, просто установив таинственный флаг глубины, правильно ...? так что, возможно, мне нужно создать сигналы и перехватить drag \ drop? – avivba

ответ

0

Если вы хотите ограничить глубину перетаскивания QTreeWidget, вам необходимо переписать его.

Но, если вы только нужно перетащить на верхнем уровне, вы можете установить флаги QTreeWidgetItem следующим образом:

QTreeWidgetItem *ptr_item = new QTreeWidgetItem(); 
    ptr_item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled); 
Смежные вопросы