gpt4 book ai didi

c++ - QTreeWidget 中某个项目周围的选定效果

转载 作者:行者123 更新时间:2023-11-28 05:45:40 26 4
gpt4 key购买 nike

当我将选择模式设置为 ExtendSelection 时,“选定效果”(使用 TAB 时获得的效果)始终存在于我的 QTreeWidget 中(我需要它才能选择多个项目)。

如果我从代码中删除这一行,效果就消失了:

 ui->treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);

如何在保留 ExetendSelection 的同时删除它?这是图片。 (说清楚,我不想要的是“Amis”项周围的边框效果)

Example

谢谢。

最佳答案

正如 SaZ 所说,您必须使用自定义委托(delegate) 和覆盖的 paint() 方法。

在我的项目中,我使用这种方法:

void CMyDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
QStyleOptionViewItem itemOption(option);

// This solves your problem - it removes a "focus rectangle".
if (itemOption.state & QStyle::State_HasFocus)
itemOption.state = itemOption.state ^ QStyle::State_HasFocus;

initStyleOption(&itemOption, index);

QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &itemOption, painter, nullptr);
}

在前面的示例中,CMyDelegate 派生自 QStyledItemDelegate。您还可以从 QItemDelegate 派生,您的 paint() 方法将如下所示:

void CMyDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex & index) const
{
QStyleOptionViewItem itemOption(option);

// This solves your problem - it removes a "focus rectangle".
if (itemOption.state & QStyle::State_HasFocus)
itemOption.state = itemOption.state ^ QStyle::State_HasFocus;

QItemDelegate::paint(painter, itemOption, index);
}

这是使用自定义委托(delegate)的方法:

CMyDelegate* delegate = new CMyDelegate(treeWidget);
treeWidget->setItemDelegate(delegate);

关于c++ - QTreeWidget 中某个项目周围的选定效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com