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)
提前致谢.
您的问题很可能来自这样一个事实,即在将字体大小设置为远大于默认值的字体之前,您将渐变的"区域"基于项目的边界矩形.
因此,您获得的边界矩形比实际的边界矩形小得多.由于默认的展开方法是填充,因此您很可能只看到一种颜色(或者实际上看不到它的梯度).
因此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)
| 归档时间: |
|
| 查看次数: |
4906 次 |
| 最近记录: |