QGraphicsEffect Class

QGraphicsEffect 클래스는 모든 그래픽 효과의 기본 클래스입니다. 더 보기...

Header: #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() 함수를 호출하여 그래픽 효과 소스의 픽셀맵을 가져와서 처리할 수 있습니다.

효과가 변경되면 update()를 사용하여 다시 그리기를 요청하세요. 사용자 정의 효과로 인해 소스의 경계 사각형이 변경되는 경우(예: 방사형 글로우 효과에 추가 여백을 적용해야 하는 경우) 가상 boundingRectFor() 함수를 다시 구현하고 updateBoundingRect()를 호출하여 이 사각형이 변경될 때마다 프레임워크에 알릴 수 있습니다. 가상 sourceChanged() 함수는 소스가 어떤 식으로든 변경된 경우(예: 소스가 QGraphicsRectItem 이고 해당 사각형 매개변수가 변경된 경우) 효과에 알리기 위해 호출됩니다.

QGraphicsItem::setGraphicsEffect() 및 QWidget::setGraphicsEffect()도 참조하세요 .

멤버 유형 문서

열거형 QGraphicsEffect::ChangeFlag
플래그 QGraphicsEffect::ChangeFlags

이 열거형은 QGraphicsEffectSource에서 변경된 사항을 설명합니다.

Constant설명
QGraphicsEffect::SourceAttached0x1이펙트가 소스에 설치됩니다.
QGraphicsEffect::SourceDetached0x2이펙트가 소스에서 제거되었습니다.
QGraphicsEffect::SourceBoundingRectChanged0x4소스의 경계 직사각형이 변경되었습니다.
QGraphicsEffect::SourceInvalidated0x8소스의 시각적 모양이 변경되었습니다.

ChangeFlags 유형은 QFlags<ChangeFlag>에 대한 유형 정의입니다. ChangeFlag 값의 OR 조합을 저장합니다.

enum QGraphicsEffect::PixmapPadMode

이 열거형은 sourcePixmap 에서 반환된 픽셀맵을 패딩하는 방법을 설명합니다.

Constant설명
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()

소스에서 효과를 제거하고 그래픽 효과를 삭제합니다.

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

소스가 사실상 픽셀맵인 경우 true 을 반환합니다(예: QGraphicsPixmapItem).

이 함수는 최적화 목적으로 유용합니다. 예를 들어, 이 함수가 true 을 반환하면 소스 픽셀맵은 어차피 크기가 조정되므로 픽셀맵 스케일링을 피하기 위해 디바이스 좌표로 소스를 그릴 필요가 없습니다.

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

소스가 그려진 픽셀맵을 반환합니다.

system 은 소스에 사용할 좌표계를 지정합니다. 선택적 offset 매개변수는 현재 페인터를 사용하여 픽셀맵을 칠할 오프셋을 반환합니다. 픽셀맵을 덧칠하는 방법을 제어하려면 mode 매개변수를 사용합니다.

systemQt::DeviceCoordinates 인 경우 반환된 픽셀맵은 현재 페인터의 장치 사각형에 클리핑됩니다.

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.