默认情况下,QTreeWidget
会管理行的选择(当您单击一行时,它会将其突出显示,当您单击另一行时,它会突出显示并取消先前的行),但我不想要这个功能,并且无法找到关闭它的方法。
默认情况下,QTreeWidget
会管理行的选择(当您单击一行时,它会将其突出显示,当您单击另一行时,它会突出显示并取消先前的行),但我不想要这个功能,并且无法找到关闭它的方法。
您可以使用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);
yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)