QGraphicsEffect Class

QGraphicsEffect クラスは、すべてのグラフィック・エフェクトの基本クラスです。詳細...

Header: #include <QGraphicsEffect>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Inherits: QObject
Inherited By:

QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, and 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() を呼び出すと、グラフィック・エフェクト・ソースの 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()

ソースから効果を削除し、グラフィックス効果を破棄します。

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)

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

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

例えば

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 である場合はtrue を返します(例:QGraphicsPixmapItem )。

この関数は、最適化の目的に役立ちます。例えば、この関数が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()も参照してください

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。