3

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

4

2 回答 2

6

您可以使用setSelectionModeQAbstractItemViewQTreeWidget继承自)为组件设置无选择模式。像这样的东西(对不起,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);
于 2010-01-10T01:09:52.847 回答
1

谢谢楼上的回答,我觉得Python版本是(^^):

yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)
于 2019-05-08T08:07:44.623 回答