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