gpt4 book ai didi

qt - QLinearGradient 不能与 QBrush 一起正常工作

转载 作者:行者123 更新时间:2023-12-05 09:23:48 24 4
gpt4 key购买 nike

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

The desired gradient
(来源: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));

提前致谢。

最佳答案

您的问题很可能是因为您在将字体大小设置为比默认字体大得多的值之前,将渐变的“区域”基于项目的边界矩形。

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

因此,在创建渐变之前,将您的 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);
}
};

关于qt - QLinearGradient 不能与 QBrush 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18760450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com