默认情况下 aQTreeWidget
管理行的选择(当您单击一行时它会突出显示它,当您单击另一行时它会突出显示该行并取消选择前一行),我不想要这个并且无法弄清楚如何将其关闭。
问问题
5821 次
2 回答
6
您可以使用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);
于 2010-01-10T01:09:52.847 回答
1
谢谢楼上的回答,我觉得Python版本是(^^):
yourtreeView.setSelectionMode(QAbstractItemView.NoSelection)
yourtreeView.setFocusPolicy(QtCore.Qt.NoFocus)
于 2019-05-08T08:07:44.623 回答