QTreeWidget关闭选择

时间:2010-01-09 21:35:33

标签: python qt pyqt qtreewidget

默认情况下,QTreeWidget管理行的选择(当您单击突出显示的行时,当您单击另一行时突出显示该行并取消选择上一行),我不会我想要这个并且无法弄清楚如何关闭它。

2 个答案:

答案 0 :(得分:5)

您可以使用QAbstractItemView类的setSelectionMode(继承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);

答案 1 :(得分:0)

感谢上面的回答,我认为Python版本是(^ ^):

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