このページでは

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 では、以下の標準エフェクトが用意されています:

Graphical Effectsを一切施していない魚の画像

魚の画像にぼかし効果

魚の画像に青色の効果を適用する

魚の画像に適用した不透明度効果

魚の画像にドロップシャドウ効果を適用する

アプリケーションに適用された不透明度のドロップシャドウ効果

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

独自のカスタムエフェクトを作成するには、QGraphicsEffect(またはその他の既存のエフェクト)のサブクラスを作成し、仮想関数draw()を再実装します。この関数は、エフェクトが再描画を行う必要があるたびに呼び出されます。draw()関数は、描画に使用するペインターを引数として受け取ります。 詳細については、draw() のドキュメントを参照してください。draw() 関数内では、sourcePixmap() を呼び出してグラフィックエフェクトのソースのピクマップを取得し、それを処理することができます。

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

QGraphicsItem::setGraphicsEffect() およびQWidget::setGraphicsEffect()も参照してください 。

メンバ型のドキュメント

enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags

この列挙型は、QGraphicsEffectSourceにおける変更点を説明しています。

定数値説明
QGraphicsEffect::SourceAttached0x1エフェクトがソースにインストールされます。
QGraphicsEffect::SourceDetached0x2ソースからエフェクトがアンインストールされます。
QGraphicsEffect::SourceBoundingRectChanged0x4ソースのバウンディングボックスが変更されました。
QGraphicsEffect::SourceInvalidated0x8ソースの外観が変更されました。

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

enum QGraphicsEffect::PixmapPadMode

この列挙型は、sourcePixmap から返されるピクマップのパディング方法を定義します。

定数値説明
QGraphicsEffect::NoPad0ピクマップには追加のパディングを行わない。
QGraphicsEffect::PadToTransparentBorder1ピクマップには、完全に透明な境界線になるようパディングを適用する必要があります。
QGraphicsEffect::PadToEffectiveBoundingRect2ピクマップには、エフェクトの有効な境界矩形に合わせてパディングが追加される必要があります。

プロパティのドキュメント

enabled : bool

このプロパティは、エフェクトが有効か無効かに関係なく適用されます。

エフェクトが無効になっている場合、ソースはエフェクトの影響を受けることなく、通常通りレンダリングされます。エフェクトが有効になっている場合、ソースにはエフェクトが適用された状態でレンダリングされます。

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

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

アクセス関数:

bool isEnabled() const
void setEnabled(bool enable)

通知シグナル:

void enabledChanged(bool enabled)

メンバ関数のドキュメント

QGraphicsEffect::QGraphicsEffect(QObject *parent = nullptr)

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

[virtual noexcept] QGraphicsEffect::~QGraphicsEffect()

対象からエフェクトを解除し、Graphical Effectsを破棄します。

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 を使用してエフェクトの描画実装を提供してください。

例:

void 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() からのみ呼び出す必要があります。

例:

void 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

ソースが実質的にピクマップ(例:QGraphicsPixmapItem )である場合、true を返します。

この関数は最適化の目的で役立ちます。例えば、この関数が `true ` を返す場合、ピクマップのスケーリングを避けるためにソースをデバイス座標で描画しても意味がありません。ソースのピクマップはいずれにせよスケーリングされるからです。

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

ソースが描画されたピクマップを返します。

system は、ソースにどの座標系を使用するかを指定します。オプションのoffset パラメータは、現在のペインターを使用してピクマップを描画する際のオフセットを返します。ピクマップのパディング方法を制御するには、mode パラメータを使用します。

system がQt::DeviceCoordinates の場合、返されるピクマップは現在のペインターのデバイス矩形にクリップされます。

QGraphicsEffect::draw() の範囲外でQt::DeviceCoordinates を指定してこの関数を呼び出すと、利用可能なデバイスコンテキストが存在しないため、予期しない結果となります。

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

[slot] void QGraphicsEffect::update()

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

updateBoundingRect()も参照してください 。

[protected] void QGraphicsEffect::updateBoundingRect()

この関数は、エフェクトの境界矩形が変更された際に、エフェクト・フレームワークに通知します。カスタム・エフェクトの作成者は、仮想関数 `boundingRectFor()` が異なる値を返す原因となるパラメータを変更するたびに、この関数を呼び出す必要があります。

この関数は、必要に応じてupdate()を呼び出します。

関連項目: boundingRectFor()、boundingRect()、およびsourceBoundingRect()。

© 2026 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.