1

グラフィックフレームワークのクラスで画面に1桁を描画したい。「1」の塗りつぶしアプローチを次のようにしたい

好みのグラデーション
(出典: 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));

ありがとうございます。

4

1 に答える 1

7

あなたの問題は、フォントサイズをデフォルトよりもはるかに大きく設定する前に、グラデーションの「領域」を項目の境界矩形に基づいているという事実に起因する可能性が最も高い.

したがって、取得している境界四角形は、実際の境界四角形よりもはるかに小さくなります。デフォルトの拡散方法はパディングであるため、ほとんどの場合、1 つの色しか表示されません (または、実際に表示するにはグラデーションが不十分です)。

したがって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);
        }
};
于 2013-09-12T12:42:14.277 に答える