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 } |
プロパティ
- enabled : bool
パブリック関数
| 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 では、以下の標準エフェクトが用意されています:
- QGraphicsBlurEffect - 指定された半径でアイテムをぼかします
- QGraphicsDropShadowEffect - アイテムの背後にドロップシャドウを描画します
- QGraphicsColorizeEffect - 指定された色の濃淡でアイテムを描画する
- QGraphicsOpacityEffect - アイテムを不透明度を指定して描画する
| |
|
|
|
|

各エフェクトの使用方法の詳細については、各エフェクトのドキュメントを参照してください。
独自のカスタムエフェクトを作成するには、QGraphicsEffect(またはその他の既存のエフェクト)のサブクラスを作成し、仮想関数draw()を再実装します。この関数は、エフェクトが再描画を行う必要があるたびに呼び出されます。draw()関数は、描画に使用するペインターを引数として受け取ります。 詳細については、draw() のドキュメントを参照してください。draw() 関数内では、sourcePixmap() を呼び出してグラフィックエフェクトのソースのピクマップを取得し、それを処理することができます。
エフェクトが変更された場合は、update() を使用して再描画を要求してください。カスタムエフェクトによってソースの境界矩形が変更される場合(たとえば、放射状のグローエフェクトで余白を追加する必要がある場合など)、仮想関数boundingRectFor() を再実装し、この矩形が変更されるたびにupdateBoundingRect() を呼び出してフレームワークに通知することができます。 仮想関数 `sourceChanged()` は、ソースに何らかの変更があったことをエフェクトに通知するために呼び出されます。例えば、ソースが `QGraphicsRectItem ` であり、その矩形パラメータが変更された場合などです。
QGraphicsItem::setGraphicsEffect() およびQWidget::setGraphicsEffect()も参照してください 。
メンバ型のドキュメント
enum QGraphicsEffect::ChangeFlag
flags QGraphicsEffect::ChangeFlags
この列挙型は、QGraphicsEffectSourceにおける変更点を説明しています。
| 定数 | 値 | 説明 |
|---|---|---|
QGraphicsEffect::SourceAttached | 0x1 | エフェクトがソースにインストールされます。 |
QGraphicsEffect::SourceDetached | 0x2 | ソースからエフェクトがアンインストールされます。 |
QGraphicsEffect::SourceBoundingRectChanged | 0x4 | ソースのバウンディングボックスが変更されました。 |
QGraphicsEffect::SourceInvalidated | 0x8 | ソースの外観が変更されました。 |
ChangeFlags 型は、QFlags<ChangeFlag> の typedef です。これは、ChangeFlag 値の OR 組み合わせを格納します。
enum QGraphicsEffect::PixmapPadMode
この列挙型は、sourcePixmap から返されるピクマップのパディング方法を定義します。
| 定数 | 値 | 説明 |
|---|---|---|
QGraphicsEffect::NoPad | 0 | ピクマップには追加のパディングを行わない。 |
QGraphicsEffect::PadToTransparentBorder | 1 | ピクマップには、完全に透明な境界線になるようパディングを適用する必要があります。 |
QGraphicsEffect::PadToEffectiveBoundingRect | 2 | ピクマップには、エフェクトの有効な境界矩形に合わせてパディングが追加される必要があります。 |
プロパティのドキュメント
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.




