Все очень просто.
1) Пишешь свой делегат для QTreeWidget. Нужно наследоваться от QItemDelegate и перегрузить метод paint (будем отрисоввывать рамку вокруг айтема). Выглядеть будет это примерно так:
C++ (Qt)
void TreeWidgetDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
painter->drawRect(option.rect);
QItemDelegate::paint(painter, option, index);
}
2) Берешь QTreeWidget, устанавливаешь для него setRootIsDecorated(false) чтобы издавится от элементов раскрытия\закрытия веток дерева.
3) Устанавливаешь нужное тебе кол-во колонок - setColumnCount(...)
4) Устанавливаешь для QTreeWidget созданый тобой делегат
5) Заполняешь дерево, при этом нужно позволить редактирование ячеек. Это делается путем установки флага Qt::ItemIsEditable для айтема:
C++ (Qt)
item->setFlags(item->flags() | Qt::ItemIsEditable);