QTreeWidget отключить выделение - PullRequest
2 голосов
/ 10 января 2010

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

Ответы [ 2 ]

5 голосов
/ 10 января 2010

Вы можете использовать setSelectionMode класса QAbstractItemView (от которого наследуется QTreeWidget), чтобы не устанавливать режим выбора для компонента.Примерно так (извините, код на C ++):

yourtreeView->setSelectionMode(QAbstractItemView::NoSelection);

В этом случае элементы не будут выделены, но вы все равно увидите прямоугольник фокуса вокруг них.Чтобы это исправить, вы можете настроить виджет так, чтобы он не принимал фокус, вызвав:

yourtreeView->setFocusPolicy(Qt::NoFocus);

, если ваш виджет дерева должен принимать фокус, но не должен рисовать прямоугольники фокуса, вы можете использовать пользовательский делегат элемента и удалить State_HasFocusсостояние от состояния элемента до его рисования.Как то так:

class NoFocusDelegate : public QStyledItemDelegate
{
protected:
    void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
};

void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
    QStyleOptionViewItem itemOption(option);
    if (itemOption.state & QStyle::State_HasFocus)
        itemOption.state = itemOption.state ^ QStyle::State_HasFocus;
    QStyledItemDelegate::paint(painter, itemOption, index);
}

....

NoFocusDelegate* delegate = new NoFocusDelegate();
yourtreeView->setItemDelegate(delegate);
0 голосов
/ 08 мая 2019

Спасибо за ответ выше, я думаю, что версия Python (^ ^):

yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)
...