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 인 경우, 반환된 픽스맵은 현재 페인터의 디바이스 사각형으로 잘립니다.
Qt::DeviceCoordinates 가 QGraphicsEffect::draw() 외부에서 이 함수를 호출하면 사용 가능한 디바이스 컨텍스트가 없으므로 정의되지 않은 결과가 반환됩니다.
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.




