1

我想通过图形框架类在屏幕上绘制 1 位数字。我希望“1”的填充方法类似于

所需的梯度
(来源:qt-project.org

但是我绘制的'1'的画笔就像下面代码的黄色SolidBrush(一个丑陋的粗体黄色'1')。你能帮我看看有什么问题吗?

QGraphicsSimpleTextItem digit_1 = new QGraphicsSimpleTextItem;
digit_1->setText(QString::number(1));
digit_1->setPen(QPen(QColor("black"))); 

QLinearGradient gradient(digit_1->boundingRect().topLeft(),
                          digit_1->boundingRect().bottomRight());

gradient.setColorAt(0, Qt::white);
gradient.setColorAt(1, Qt::yellow);  // yellow is for example

QBrush brush(gradient);
brush.setStyle(Qt::BrushStyle::LinearGradientPattern);

digit_1->setBrush(brush);
digit_1->setFont(QFont("courier", 35, QFont::Black));

提前致谢。

4

1 回答 1

7

您的问题很可能来自这样一个事实,即在将字体大小设置为比默认值大得多之前,您将渐变的“区域”基于项目的边界矩形。

因此,您得到的边界矩形比实际的边界矩形小得多。由于默认的传播方法是填充,因此您很可能只看到一种颜色(或者没有足够的渐变使其实际可见)。

因此setFont,在创建渐变之前,将您的呼叫移至顶部。您可以将其setStyle放在画笔上,这是根据渐变自动确定的。(事实上​​,您可以完全放下画笔并使用 中的渐变setBrush。)

通过设置渐变的方式,您将获得“对角线”渐变。如果要从上到下,请改用左上角和左下角。

演示

在此处输入图像描述

#include <QtGui>

class W: public QGraphicsView
{
    Q_OBJECT

    public:
        W(QWidget *parent = 0)
            : QGraphicsView(parent)
        {

            QGraphicsSimpleTextItem *item = new QGraphicsSimpleTextItem;
            item->setText("Stack Overflow");
            item->setPen(QPen(Qt::red));
            item->setFont(QFont("courier", 60, QFont::Bold));

            QLinearGradient lgrad(item->boundingRect().topLeft(),
                                  item->boundingRect().bottomLeft());
            lgrad.setColorAt(0.0, Qt::red);
            lgrad.setColorAt(1.0, Qt::yellow);
            item->setBrush(lgrad);

            QGraphicsScene *scene = new QGraphicsScene;
            scene->setBackgroundBrush(QBrush(Qt::black));
            scene->addItem(item);

            setScene(scene);
        }
};
于 2013-09-12T12:42:14.277 回答