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 提供的样式或主题。我没有办法解决这个问题。我仍然愿意接受更好的解决方案!
我正在尝试为 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 提供的样式或主题。我没有办法解决这个问题。我仍然愿意接受更好的解决方案!