QTreeView 复选框颜色

QTreeView checkbox color

我正在尝试为 QTreeView 中的复选框添加颜色,就像这样

我从 QStyledItemDelegate 切换到 QItemDelegate 以更好地控制绘图过程,主要用于 drawCheck 方法。虽然我不能让画家画出我想要的颜色。使用 css,我成功地更改了所有复选框的颜色,但我需要根据某些属性(此处不重要)选择颜色。修改 QTreeView 的 QStyle 可能有效,但我会遇到同样的 "unique color" 问题。

修改画家或选项参数没有任何作用。

painter->setPen(aRandomColor);
auto coloredOption = option;
coloredOption.backgroundBrush.setColor(aRandomColor);
QItemDelegate::drawCheck(painter, coloredOption, rect, state);

我知道我可以自己 drawCheck 处理完整的绘图过程,而无需调用 QItemDelegate::drawCheck

const auto color = wathever;
draw square outline using color
draw filled square using color
// Do NOT call QItemDelegate::drawCheck(...)

但这会在所有操作系统上产生统一的感觉。有没有办法要求背景颜色?比如...画你想画的东西,但是使用{color}"?

我测试了我能找到的所有成员,但都无济于事。所以我做了我不想做的事:自己处理绘图过程。

void ActionsItemDelegate::drawCheck(QPainter *painter, ...) {
    if (thisCheckboxNeedsColoring) {
        painter->setPen(dynamicColor);
#ifdef __APPLE__
        painter->setRenderHint(QPainter::Antialiasing);
        QPainterPath path;
        path.addRoundedRect(QRectF(rect.adjusted(3, 3, -4, -3)), 1.0, 1.0);
        painter->fillPath(path, color);
        painter->drawPath(path);
        if (state != Qt::Unchecked)
        {
          painter->fillRect(rect.adjusted(5, 8, -6, -8), Qt::white);
        }
#else
        painter->drawRect(rect.adjusted(0, 0, -1, -1));
        if (state != Qt::Unchecked)
        {
          painter->fillRect(rect.adjusted(3, 3, -3, -3), color);
        }
#endif
    } else {
        QItemDelegate::drawCheck(painter, option, rect, state);
    }
}

当然,这没有考虑 Windows、Linux 和 macOS 提供的样式或主题。我没有办法解决这个问题。我仍然愿意接受更好的解决方案!