如何在Qt中按区域填充不同颜色段的圆角矩形?

时间:2014-02-02 15:25:21

标签: c++ qt

我是Qt的新手,我尝试在线查找示例和文档,但找不到任何东西。我想要这样的东西:

enter image description here

我尝试使用QLinearGradient,但它不是我想要的。我想要纯色。 这是我尝试过的:

void drawBackground ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const {
    QLinearGradient linearGrad(QPointF(option.rect.x(), 0), QPointF(option.rect.x() + option.rect.width(), 0));

    int total = index.data(StatisticsModel::TotalCount).toInt();
    linearGrad.setColorAt(0.0, QColor(255, 255, 255, 0));

    int sum = 0;
    for (int i = 7; i >= 1; i--) {
        int count = index.data(StatisticsModel::Grade0 + i).toInt();

        if (count) {
            sum += count;
            linearGrad.setColorAt(1.0-((double)(total-sum))/total, Prefs::gradeColor(i));

        }
    }


    QRect rect(option.rect);
    rect.adjust(1, 1, -1, -1);

    QPainterPath path;
    path.addRoundedRect( rect, 2.0, 2.0 );
    painter->setBrush(QBrush(linearGrad));
    painter->drawPath(path);
}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

最好的方法是将彩色圆角矩形像这样,我想是为它创建QPainterPath然后构造正常的矩形,它应该是指定颜色,使用函数{与初始圆角矩形QPainterPath相交{1}}并绘制它们,选择相应的纯色画笔并使用函数QPainterPath::intersected