QLinearGradient与QBrush无法正常工作

时间:2013-09-12 09:27:57

标签: qt drawing lineargradientbrush

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

The desired gradient 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));

先谢谢。

1 个答案:

答案 0 :(得分:5)

您的问题很可能来自这样一个事实:您将渐变的“区域”基于项的边界矩形,然后将字体大小设置为远大于默认值。< / p>

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

在创建渐变之前,请将setFont调用移至顶部。您可以将setStyle放在画笔上,这是从渐变中自动确定的。 (事实上​​,你可以完全放下那把刷子并使用setBrush中的渐变。)

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

演示

  

enter image description here

#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);
        }
};