QLinearGradient与QBrush无法正常工作

ehs*_*ian 0 qt drawing lineargradientbrush

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

所需的梯度http://qt-project.org/doc/qt-5.0/qtgui/images/qpainterpath-addtext.png

但是我画的'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));
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Mat*_*Mat 6

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

因此,您获得的边界矩形比实际的边界矩形小得多.由于默认的展开方法是填充,因此您很可能只看到一种颜色(或者实际上看不到它的梯度).

因此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);
        }
};
Run Code Online (Sandbox Code Playgroud)