Во-первых, я должен спросить, действительно ли вы используете QTreeWidget или, скорее, QTreeView? Вы не можете использовать пользовательские делегаты с QTreeWidget в соответствии с документацией для QTreeView, и вам придется использовать QTree * View * и некоторую форму QAbstractItemModel, чтобы вы могли использовать пользовательский делегат.
Ах, поцарапайте это. Я вижу, что вы вызываете setItemDelegateForColumn, который является функцией QTreeView, но вы должны знать о разнице, поэтому я сохраняю вышеприведенный абзац. :)
Я бы проверил, что функция flags () вашей модели возвращает Qt :: ItemIsEditable как часть своих флагов элементов. Метод createEditor () вызывается всякий раз, когда представление сообщает о событии редактирования. (События просмотра, которые будут инициировать редактирование, зависят от EditTriggers модели). Как правило, двойной щелчок на делегате вызывает редактирование по умолчанию, среди прочего.
Я сомневаюсь, что вы хотите, чтобы кнопка закрытия появлялась только при двойном щелчке. Чтобы кнопка отображалась постоянно, вам придется переопределить функцию paint () делегата, чтобы нарисовать кнопку, среди прочего. Мне показалось, что StarDelegate пример Qt весьма полезен в этом отношении, и я подозреваю, что он вам тоже пригодится.