QGraphicsEffect Class

QGraphicsEffectクラスはすべてのGraphical Effectsの基本クラスです。詳細...

ヘッダー #include <QGraphicsEffect>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
を継承する: QObject
によって継承される:

QGraphicsBlurEffect,QGraphicsColorizeEffect,QGraphicsDropShadowEffect, およびQGraphicsOpacityEffect

パブリックな型

enum ChangeFlag { SourceAttached, SourceDetached, SourceBoundingRectChanged, SourceInvalidated }
flags ChangeFlags
enum PixmapPadMode { NoPad, PadToTransparentBorder, PadToEffectiveBoundingRect }

プロパティ

パブリック機能

QGraphicsEffect(QObject *parent = nullptr)
virtual ~QGraphicsEffect()
QRectF boundingRect() const
virtual QRectF boundingRectFor(const QRectF &rect) const
bool isEnabled() const

パブリックスロット

void setEnabled(bool enable)
void update()

シグナル

void enabledChanged(bool enabled)

保護された関数

virtual void draw(QPainter *painter) = 0
void drawSource(QPainter *painter)
QRectF sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const
virtual void sourceChanged(QGraphicsEffect::ChangeFlags flags)
bool sourceIsPixmap() const
QPixmap sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const
void updateBoundingRect()

詳細説明

エフェクトは、レンダリングパイプラインにフックし、ソース(たとえば、QGraphicsPixmapItem )とデスティネーションデバイス(たとえば、QGraphicsView'のビューポート)の間で操作することにより、要素の外観を変更します。エフェクトは、setEnabled (false)を呼び出すことで無効にできます。エフェクトを無効にすると、ソースが直接レンダリングされます。

例えば、QGraphicsItem に視覚効果を追加するには、標準の効果を使用するか、QGraphicsEffect のサブクラスを作成して独自の効果を作成します。このエフェクトは、QGraphicsItem::setGraphicsEffect() を使ってアイテムにインストールすることができます。

Qt には以下の標準エフェクトがあります:

各エフェクトの使用方法については、各エフェクトのドキュメントを参照してください。

独自のカスタムエフェクトを作成するには、QGraphicsEffect(またはその他の既存のエフェクト)のサブクラスを作成し、仮想関数draw() を再実装します。この関数は、エフェクトの再描画が必要になるたびに呼び出されます。draw() 関数は、描画するペインターを引数にとります。詳細については、draw() のドキュメントを参照してください。draw() 関数の中でsourcePixmap() を呼び出すと、Graphical Effects のソースの pixmap を取得できます。

エフェクトが変更された場合は、update() を使用して再描画を要求します。カスタム・エフェクトがソースの境界矩形を変更する場合、例えば、放射状のグロー・エフェクトが余分なマージンを適用する必要がある場合、仮想boundingRectFor() 関数を再実装し、この矩形が変更されるたびにフレームワークに通知するためにupdateBoundingRect() を呼び出すことができます。仮想sourceChanged() 関数は、ソースが何らかの方法で変更されたことをエフェクトに通知するために呼び出されます。例えば、ソースがQGraphicsRectItem で、その矩形パラメータが変更された場合などです。

QGraphicsItem::setGraphicsEffect() およびQWidget::setGraphicsEffect()も参照のこと

メンバ型ドキュメント

enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags

この enum は、QGraphicsEffectSource で何が変更されたかを記述します。

定数説明
QGraphicsEffect::SourceAttached0x1エフェクトがソースにインストールされています。
QGraphicsEffect::SourceDetached0x2エフェクトがソースにアンインストールされました。
QGraphicsEffect::SourceBoundingRectChanged0x4ソースの境界矩形が変更された。
QGraphicsEffect::SourceInvalidated0x8ソースの視覚的な外観が変更された。

ChangeFlags 型は、QFlags<ChangeFlag> の typedef です。これは、ChangeFlag 値の OR の組み合わせを格納します。

enum QGraphicsEffect::PixmapPadMode

この列挙型は、sourcePixmap から返される pixmap がどのようにパディングされるべきかを記述します。

定数説明
QGraphicsEffect::NoPad0pixmapはパディングされるべきではありません。
QGraphicsEffect::PadToTransparentBorder1pixmap は、完全に透明な境界を持つようにパディングされるべきです。
QGraphicsEffect::PadToEffectiveBoundingRect2pixmap は、エフェクトの有効な境界矩形に一致するようにパディングされるべきである。

プロパティの説明

enabled : bool

このプロパティは、エフェクトが有効かどうかを保持します。

エフェクトが無効な場合、ソースはエフェクトの干渉を受けずに通常通りにレンダリングされます。エフェクトが有効な場合、ソースはエフェクトが適用された状態でレンダリングされます。

このプロパティはデフォルトで有効になっています。

このプロパティを使用すると、ユーザー インターフェイスの応答性を確保するために、低速プラットフォームで特定のエフェクトを無効にできます。

アクセス関数

bool isEnabled() const
void setEnabled(bool enable)

Notifier シグナル:

void enabledChanged(bool enabled)

メンバ関数ドキュメント

QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)

指定されたparent を持つ新しい QGraphicsEffect インスタンスを構築します。

[virtual noexcept] QGraphicsEffect::~QGraphicsEffect()

ソースからエフェクトを削除し、Graphical Effectを破棄します。

QRectF QGraphicsEffect::boundingRect() const

このエフェクトの効果的な外接矩形、つまりデバイス座標におけるソースの外接矩形を、エフェクト自体によって適用されるマージンで調整したものを返します。

boundingRectFor() およびupdateBoundingRect()も参照して ください。

[virtual] QRectF QGraphicsEffect::boundingRectFor(const QRectF &rect) const

デバイス座標で指定されたrect を指定して、このエフェクトの有効な外接矩形を返します。独自のカスタムエフェクトを作成する場合は、この関数が異なる値を返す原因となるパラメータが変更されるたびに、updateBoundingRect() を呼び出す必要があります。

sourceBoundingRect()も参照してください

[pure virtual protected] void QGraphicsEffect::draw(QPainter *painter)

この純粋な仮想関数はエフェクトを描画し、ソースを描画する必要があるときはいつでも呼び出されます。

この関数をQGraphicsEffect のサブクラスで再実装し、painter を使用してエフェクトの描画実装を提供します。

例えば

MyGraphicsEffect::draw(QPainter *painter)
{
    ...
    QPoint offset;
    if (sourceIsPixmap()) {
        // No point in drawing in device coordinates (pixmap will be scaled anyways).
        const QPixmap pixmap = sourcePixmap(Qt::LogicalCoordinates, &offset);
        ...
        painter->drawPixmap(offset, pixmap);
    } else {
        // Draw pixmap in device coordinates to avoid pixmap scaling;
        const QPixmap pixmap = sourcePixmap(Qt::DeviceCoordinates, &offset);
        painter->setWorldTransform(QTransform());
        ...
        painter->drawPixmap(offset, pixmap);
    }
    ...
}

この関数は再実装のみを目的としているため、ユーザーが明示的に呼び出すべきではありません。

[protected] void QGraphicsEffect::drawSource(QPainter *painter)

与えられたpainter を使用してソースを直接描画します。

この関数はQGraphicsEffect::draw() からのみ呼び出される。

例えば

MyGraphicsOpacityEffect::draw(QPainter *painter)
{
    // Fully opaque; draw directly without going through a pixmap.
    if (qFuzzyCompare(m_opacity, 1)) {
        drawSource(painter);
        return;
    }
    ...
}

QGraphicsEffect::draw()も参照してください

[signal] void QGraphicsEffect::enabledChanged(bool enabled)

このシグナルは、エフェクトが有効または無効になるたびに発せられる。enabled パラメータは、エフェクトの新しい有効状態を保持する。

注意: enabled プロパティのノーティファイアシグナル。

isEnabled()も参照

[protected] QRectF QGraphicsEffect::sourceBoundingRect(Qt::CoordinateSystem system = Qt::LogicalCoordinates) const

与えられたsystem にマップされたソースの外接矩形を返す。

QGraphicsEffect::draw() の外部でQt::DeviceCoordinates を指定してこの関数を呼び出すと、利用可能なデバイスコンテキストがないため、未定義の結果が返される。

draw()も参照してください

[virtual protected] void QGraphicsEffect::sourceChanged(QGraphicsEffect::ChangeFlags flags)

この仮想関数はQGraphicsEffect によって呼び出され、ソースが変更されたことをエフェクトに通知する。エフェクトが何らかのキャッシュを適用している場合、ソースの新しい外観を反映するために、このキャッシュをパージする必要があります。

flags に何が変更されたかを記述する。

[protected] bool QGraphicsEffect::sourceIsPixmap() const

ソースが効果的にpixmap、例えばQGraphicsPixmapItem である場合、true を返す。

この関数は最適化のために有用です。例えば、この関数がtrue を返す場合、pixmap のスケーリングを避けるためにソースをデバイス座標で描画する意味はありません。

[protected] QPixmap QGraphicsEffect::sourcePixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates, QPoint *offset = nullptr, QGraphicsEffect::PixmapPadMode mode = PadToEffectiveBoundingRect) const

ソースが描画された pixmap を返します。

system は、ソースに使用する座標系を指定します。オプションのoffset パラメータは、現在のペインタを使って pixmap を描画するオフセットを返します。pixmap の詰め方を制御するには、mode パラメータを使用します。

systemQt::DeviceCoordinates の場合、 返された pixmap は現在のペインターのデバイス矩形にクリッピングされます。

QGraphicsEffect::draw() の外部でQt::DeviceCoordinates を指定してこの関数を呼び出すと、利用可能なデバイスコンテキストがないため、未定義の結果が返されます。

draw() およびboundingRect()も参照してください

[slot] void QGraphicsEffect::update()

エフェクトの再描画をスケジュールする。エフェクトを再描画する必要があるときはいつでもこの関数を呼び出します。この関数はソースの再描画をトリガしません。

updateBoundingRect()も参照

[protected] void QGraphicsEffect::updateBoundingRect()

この関数は、エフェクトのバウンディングレクタングルが変更されたときに、エフェクトフレームワークに通知します。カスタム・エフェクトの作成者として、仮想boundingRectFor() 関数が異なる値を返す原因となるパラメータを変更するときはいつでも、この関数を呼び出す必要があります。

この関数が必要な場合は、update() を呼び出します。

boundingRectFor()、boundingRect()、sourceBoundingRect()も参照してください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.