QCanvasPainterWidget Class
QCanvasPainterWidget은 QCanvasPainter 을 사용하여 렌더링하는 위젯입니다. 더 보기...
| 헤더: | #include <QCanvasPainterWidget> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS CanvasPainter)target_link_libraries(mytarget PRIVATE Qt6::CanvasPainter) |
| 이후 | Qt 6.11 |
| 상속합니다: | QRhiWidget |
| Status: | 기술 미리보기 |
공용 함수
| QCanvasPainterWidget(QWidget *parent = nullptr) | |
| virtual | ~QCanvasPainterWidget() override |
| QColor | fillColor() const |
| void | grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback) |
| bool | hasSharedPainter() const |
| void | setFillColor(const QColor &color) |
| void | setSharedPainter(bool enable) |
보호된 함수
| void | beginCanvasPainting(QCanvasOffscreenCanvas &canvas) |
| void | endCanvasPainting() |
| virtual void | graphicsResourcesInvalidated() |
| virtual void | initializeResources(QCanvasPainter *painter) |
| virtual void | paint(QCanvasPainter *painter) |
| virtual void | prePaint(QCanvasPainter *painter) |
재구현된 보호 함수
| virtual void | initialize(QRhiCommandBuffer *cb) override |
| virtual void | releaseResources() override |
| virtual void | render(QRhiCommandBuffer *cb) override |
상세 설명
QCanvasPainter 을 사용하여 렌더링을 수행하려면 서브클래스에 paint 가상 함수를 구현합니다.
아래 코드 스니펫은 QCanvasPainterWidget 서브클래스의 일반적인 구조를 보여줍니다:
class MyWidget : public QCanvasPainterWidget { public: void initializeResources(QCanvasPainter *p) override { // load assets if (m_image.isNull()) m_image = p->addImage(QImage("image.png"), QCanvasPainter::ImageFlag::Repeat); } void paint(QCanvasPainter *p) override { // ... draw using m_image } void graphicsResourcesInvalidated() override { // textures are lost, indicate the need for reload m_image = {}; } QCanvasImage m_image; };
멤버 함수 문서
[explicit] QCanvasPainterWidget::QCanvasPainterWidget(QWidget *parent = nullptr)
주어진 parent 으로 QCanvasPainterWidget을 생성합니다.
[override virtual noexcept] QCanvasPainterWidget::~QCanvasPainterWidget()
QCanvasPainterWidget 를 파괴합니다.
[protected] void QCanvasPainterWidget::beginCanvasPainting(QCanvasOffscreenCanvas &canvas)
canvas 을 대상으로 하는 QCanvasPainter draw 명령을 기록하기 시작합니다.
참고: 이 함수는 prePaint()에서만 호출해야 합니다.
prePaint()에서 반환하기 전에 항상 startCanvasPainting() 뒤에 해당 endCanvasPainting()이 와야 합니다.
QCanvasPainterWidget 서브클래스의 다음 코드 조각은 위젯의 콘텐츠를 그릴 때 오프스크린 캔버스를 렌더링하여 이미지 또는 이미지 패턴으로 사용하는 방법을 보여줍니다:
class MyWidget : public QCanvasPainterWidget { public: QCanvasOffscreenCanvas canvas; QCanvasImage canvasImage; void graphicsResourcesInvalidated() override { canvas = {}; // so that the next prePaint() will recreate and redraw the canvas } void prePaint(QCanvasPainter *p) override { if (canvas.isNull()) { canvas = p->createCanvas(QSize(320, 240)); beginCanvasPainting(canvas); p->beginPath(); p->circle(160, 120, 20); p->setFillStyle(Qt::red); p->fill(); endCanvasPainting(); canvasImage = p->addImage(canvas, QCanvasPainter::ImageFlag::Repeat); } } void paint(QCanvasPainter *p) override { // use canvasImage as a brush or with drawImage() } };
[protected] void QCanvasPainterWidget::endCanvasPainting()
beginCanvasPainting()에 지정된 캔버스를 대상으로 하는 드로잉의 끝을 나타냅니다.
참고: 이 함수는 prePaint()에서만 호출해야 합니다.
beginCanvasPainting() 뒤에는 항상 prePaint()에서 반환하기 전에 해당 endCanvasPainting()이 와야 합니다.
QColor QCanvasPainterWidget::fillColor() const
현재 채우기 색을 반환합니다.
setFillColor()도 참조하세요 .
void QCanvasPainterWidget::grabCanvas(const QCanvasOffscreenCanvas &canvas, std::function<void (const QImage &)> callback)
canvas 에 대한 텍스처 읽기백 요청을 발행합니다.
callback 함수가 반환되기 전에 호출되거나, 기본 QRhi 및 3D API 구현에 따라 나중에 호출됩니다. 텍스처 콘텐츠를 다시 읽어오는 데는 GPU 아키텍처에 따라 GPU->CPU 복사본이 포함될 수 있습니다.
[virtual protected] void QCanvasPainterWidget::graphicsResourcesInvalidated()
텍스처와 같은 기본 그래픽 리소스가 손실되었을 때 호출됩니다.
이는 addImage()에서 반환된 QCanvasImage 객체가 더 이상 유효하지 않으므로 addImage()를 다시 호출해야 함을 나타냅니다. paint () 구현이 이미지가 사용되지 않거나 addImage()가 항상 호출되는 등 이러한 문제가 중요하지 않은 경우에는 아무런 조치가 필요하지 않습니다. 그렇지 않은 경우에는 플래그 등을 토글하고 다음 paint() 호출에서 그에 따라 조치를 취하는 것이 좋습니다.
QCanvasPainter::createCanvas()에서 반환된 QCanvasOffscreenCanvas 객체에도 동일하게 적용됩니다. 이 함수가 호출되면 다음에 paint()를 호출할 때 새 캔버스를 만들고 내용을 다시 그려야 합니다.
예를 들어 위젯이 새 최상위 창으로 이동하면 새 QRhi 인스턴스와 연결되므로 그래픽 리소스가 손실될 수 있습니다.
QRhiWidget::releaseResources()도 참조하세요 .
bool QCanvasPainterWidget::hasSharedPainter() const
이 위젯이 공유 페인터를 사용하는 경우 true 를 반환합니다.
setSharedPainter도 참조하세요 .
[override virtual protected] void QCanvasPainterWidget::initialize(QRhiCommandBuffer *cb)
다시 구현합니다: QRhiWidget::initialize(QRhiCommandBuffer *cb).
[virtual protected] void QCanvasPainterWidget::initializeResources(QCanvasPainter *painter)
painter 를 사용하여 리소스를 초기화하려면 이 메서드를 다시 구현합니다. 일반적으로 첫 번째 prePaint() 및 paint() 전에 한 번 호출됩니다. 그래픽 리소스가 손실된 경우는 예외입니다( graphicsResourcesInvalidated() 참조). 이 경우 이 메서드는 나중에 다시 호출됩니다.
기본 구현은 비어 있습니다.
[virtual protected] void QCanvasPainterWidget::paint(QCanvasPainter *painter)
이 메서드를 다시 구현하여 painter 을 사용하여 페인트합니다.
위젯은 먼저 fillColor()로 채워집니다.
기본 구현은 비어 있습니다.
[virtual protected] void QCanvasPainterWidget::prePaint(QCanvasPainter *painter)
painter 을 사용하여 하나 이상의 오프스크린 캔버스에 그리기를 수행하려면 이 함수를 다시 구현하세요.
기본 구현은 비어 있습니다.
beginCanvasPainting() 및 endCanvasPainting()도 참조하세요 .
[override virtual protected] void QCanvasPainterWidget::releaseResources()
다시 구현합니다: QRhiWidget::releaseResources().
[override virtual protected] void QCanvasPainterWidget::render(QRhiCommandBuffer *cb)
다시 구현합니다: QRhiWidget::render(QRhiCommandBuffer *cb).
void QCanvasPainterWidget::setFillColor(const QColor &color)
채우기 색상을 color 으로 설정합니다. 이 색상은 항목의 배경을 그리는 데 사용됩니다. 기본 색상은 검은색입니다.
fillColor()도 참조하세요 .
void QCanvasPainterWidget::setSharedPainter(bool enable)
enable 이 false 인 경우 페인터 공유를 비활성화합니다.
페인터 공유가 활성화되면 동일한 QWindow 내의 모든 QCanvasPainterWidget 인스턴스는 동일한 QCanvasPainter 을 사용합니다. 이 함수는 파생 클래스의 생성자 등 초기 단계에서 설정해야 하며 이후에는 변경해서는 안 됩니다.
페인터 공유는 기본적으로 활성화되어 있습니다.
두 위젯이 공유되지 않는 전용 페인터를 사용하는 경우 QCanvasImage 또는 QOffscreenCanvas를 뒷받침하는 것과 같은 서로의 그래픽 리소스가 위젯에 표시되지 않습니다. 반면 위젯이 같은 창에 있고 공유가 활성화되어 있으면 둘 다 동일한 QCanvasPainter 을 사용하므로 다른 위젯에서 만든 이미지나 캔버스를 사용할 수 있습니다.
참고: enable 이 참인 경우에도 다른 창(최상위 위젯)에 속한 위젯 간에는 페인터가 공유되지 않습니다.
hasSharedPainter도 참조하세요 .
© 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.