我想通过图形框架类在屏幕上绘制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));
先谢谢。
答案 0 :(得分:5)
您的问题很可能来自这样一个事实:您将渐变的“区域”基于项的边界矩形,然后将字体大小设置为远大于默认值。< / p>
因此,您获得的边界矩形比实际的边界矩形小得多。由于默认的展开方法是填充,因此您很可能只看到一种颜色(或者实际上看不到渐变的梯度)。
在创建渐变之前,请将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);
}
};