Qt Print Support

Qt Print Support 모듈은 인쇄를 위한 광범위한 크로스 플랫폼 지원을 제공합니다. 각 플랫폼의 인쇄 시스템을 사용하여 Qt 애플리케이션은 연결된 프린터로 인쇄하거나 네트워크를 통해 원격 프린터로 인쇄할 수 있습니다. 인쇄 시스템은 PDF 파일 생성도 지원하여 기본적인 보고서 생성 기능을 위한 토대를 제공합니다.

Qt Print Support iOS에서는 사용할 수 없습니다.

인쇄를 지원하는 클래스

다음 클래스는 프린터 선택 및 설정과 인쇄 출력을 지원합니다.

QAbstractPrintDialog

프린터를 구성하는 데 사용되는 인쇄 대화 상자의 기본 구현

QPageRanges

페이지 범위 컬렉션을 나타냅니다.

QPageSetupDialog

프린터의 페이지 관련 옵션에 대한 구성 대화 상자

QPrintDialog

프린터 구성을 지정하기 위한 대화 상자

QPrintEngine

Q프린터가 지정된 인쇄 하위 시스템과 상호 작용하는 방식에 대한 인터페이스를 정의합니다.

QPrintPreviewDialog

프린터 출력을 위한 페이지 레이아웃을 미리 보고 구성하기 위한 대화상자

QPrintPreviewWidget

프린터 출력용 페이지 레이아웃을 미리 보기 위한 위젯

QPrinter

프린터에 페인트를 칠하는 페인트 장치

QPrinterInfo

기존 프린터에 대한 정보에 액세스할 수 있습니다.

페인트 장치 및 인쇄

프린터는 여러 페이지 지원 및 양면 출력 등 인쇄와 관련된 기능을 제공하는 페인트 장치( QPrinter)로 표시됩니다. 따라서 인쇄에는 사용자 지정 위젯이나 이미지에 그림을 그리는 것과 같은 방식으로 QPainter 을 사용하여 일련의 페이지에 그림을 그리는 것이 포함됩니다.

Q프린터 만들기

QPrinter 개체는 사용자 입력 없이도 생성 및 설정할 수 있지만, 인쇄는 종종 사용자의 요청에 따라 수행됩니다(예: 사용자가 GUI 애플리케이션에서 File|Print... 메뉴 항목을 선택하는 경우). 이러한 경우 새로 구성된 QPrinter 객체가 QPrintDialog 에 제공되어 사용자가 사용할 프린터, 용지 크기 및 기타 인쇄 속성을 지정할 수 있습니다.

        QPrinter printer;

        QPrintDialog dialog(&printer, this);
        dialog.setWindowTitle(tr("Print Document"));
        if (editor->textCursor().hasSelection())
            dialog.addEnabledOption(QAbstractPrintDialog::PrintSelection);
        if (dialog.exec() != QDialog::Accepted)
            return;

인쇄 대화 상자에 제공되기 전에 QPrinter 을 수정하여 특정 기본 속성을 설정할 수도 있습니다. 예를 들어, 인쇄용 보고서 배치를 생성하는 애플리케이션은 기본적으로 QPrinter 을 프린터가 아닌 write to a local file 으로 설정할 수 있습니다.

페이지에 그리기

QPrinter 개체를 만들고 설정한 후에는 QPainter 을 사용하여 페인팅 작업을 수행할 수 있습니다. 다음과 같은 방법으로 페인터를 구성하고 설정할 수 있습니다:

    QPrinter printer(QPrinter::HighResolution);
    printer.setOutputFileName("print.ps");
    QPainter painter;
    painter.begin(&printer);

    for (int page = 0; page < numberOfPages; ++page) {

        // Use the painter to draw on the page.

        if (page != lastPage)
            printer.newPage();
    }

    painter.end();

QPrinter 은 빈 페이지로 시작하므로 마지막 페이지를 제외한 각 페이지를 그린 후에 newPage() 함수만 호출하면 됩니다.

end()를 호출하면 문서가 프린터로 전송되거나 로컬 파일에 기록됩니다.

좌표계

QPrinter 은 용지 크기(용지 사각형)와 인쇄 가능한 영역(페이지 사각형)의 크기에 대한 정보를 얻는 데 사용할 수 있는 함수를 제공합니다. 이러한 좌표는 장치 자체에서 사용하는 물리적 좌표와 다를 수 있는 논리적 장치 좌표로 제공되므로 프린터가 사용자의 디스플레이보다 (일반적으로 더 높은) 해상도로 텍스트와 그래픽을 렌더링할 수 있음을 나타냅니다.

논리적 좌표와 물리적 좌표 간의 변환을 직접 처리할 필요는 없지만 화면에 그리는 데 사용되는 픽셀 측정값이 일반적인 프린터의 고해상도에 비해 너무 작은 경우가 많으므로 페인팅 작업에는 변환을 적용해야 합니다.

프린터 및 페인터 좌표계

paperRect() 및 pageRect() 함수는 인쇄에 사용되는 용지의 크기와 그 위에 그림을 그릴 수 있는 영역에 대한 정보를 제공합니다.

pageRect()가 반환하는 사각형은 일반적으로 paperRect()가 반환하는 사각형 안에 위치합니다. QPainter QPrinter 을 기본 페인트 장치로 사용하는 경우 이러한 영역의 위치와 크기를 고려할 필요가 없으며, 페인트 좌표계의 원점은 페이지 사각형의 왼쪽 상단 모서리와 일치하고 페인트 작업은 페이지의 그리기 가능한 부분의 경계에 맞춰 클리핑됩니다.

페인트 시스템은 텍스트를 칠할 때 올바른 장치 메트릭을 자동으로 사용하지만 글꼴 메트릭에서 얻은 정보를 사용하여 텍스트 위치를 지정해야 하는 경우 QFontMetricsQFontMetricsF 객체를 구성할 때 인쇄 장치가 지정되어 있는지 확인하거나 사용된 각 QFontQPaintDevice 인수를 허용하는 생성자 형식을 사용하여 구성되었는지 확인해야 합니다.

위젯 인쇄하기

위젯을 인쇄하려면 QWidget::render() 함수를 사용할 수 있습니다. 앞서 언급했듯이 프린터의 해상도는 일반적으로 화면 해상도보다 높으므로 페인터의 크기를 조정해야 합니다. 페이지에 위젯을 배치할 수도 있습니다. 다음 코드 샘플은 그 모습을 보여줍니다.

        QPainter painter;
        painter.begin(&printer);
        const auto pageLayout = printer.pageLayout();
        const auto pageRect = pageLayout.paintRectPixels(printer.resolution());
        const auto paperRect = pageLayout.fullRectPixels(printer.resolution());
        double xscale = pageRect.width() / double(myWidget->width());
        double yscale = pageRect.height() / double(myWidget->height());
        double scale = qMin(xscale, yscale);
        painter.translate(pageRect.x() + paperRect.width() / 2.,
                          pageRect.y() + paperRect.height() / 2.);
        painter.scale(scale, scale);
        painter.translate(-myWidget->width() / 2., -myWidget->height() / 2.);

        myWidget->render(&painter);

이렇게 하면 위젯이 페이지의 중앙에 배치되고 페이지에 맞도록 크기가 조정됩니다.

복잡한 위젯에서 인쇄하기

QTextEditQGraphicsView 과 같은 특정 위젯은 일반적으로 QTextDocumentQGraphicsScene 과 같은 다른 클래스의 인스턴스에서 관리되는 리치 콘텐츠를 표시합니다. 따라서 이러한 콘텐츠 처리 클래스는 일반적으로 전체 작업을 수행하는 데 사용할 수 있는 함수 또는 기존 QPainter 객체를 받아들이는 함수를 통해 인쇄 기능을 제공합니다. 일부 위젯은 기본 인쇄 기능을 노출하는 편의 함수를 제공하여 단일 함수를 호출하기 위해 콘텐츠 핸들러를 가져올 필요가 없도록 합니다.

다음 표는 다양한 위젯에서 인쇄를 담당하는 클래스와 함수를 보여줍니다. 인쇄 기능을 직접 노출하지 않는 위젯의 경우 해당 위젯의 API에서 함수를 통해 이 기능이 포함된 콘텐츠 처리 클래스를 얻을 수 있습니다.

QTextEdit 는 인쇄된 문서에서 가장 적절한 위치에 페이지 나누기를 삽입하기 위해 구성된 페이지 크기에 대한 정보를 사용하기 때문에 QPainter 대신 QPrinter 가 필요합니다.

모듈 사용하기

Qt 모듈을 사용하려면 직접 또는 다른 종속성을 통해 모듈 라이브러리에 링크해야 합니다. CMakeqmake를 비롯한 여러 빌드 도구가 이를 지원합니다.

CMake로 빌드하기

find_package() 명령을 사용하여 Qt6 패키지에서 필요한 모듈 컴포넌트를 찾습니다:

find_package(Qt6 REQUIRED COMPONENTS PrintSupport)
target_link_libraries(mytarget PRIVATE Qt6::PrintSupport)

CMake로 빌드 개요도 참조하세요.

qmake로 빌드하기

qmake로 빌드하도록 모듈을 구성하려면 프로젝트의 .pro 파일에 QT 변수의 값으로 모듈을 추가합니다:

QT += printsupport

모듈 진화

Qt Print Support 의 변경 사항에는 Qt 6 시리즈에 적용된 모듈 API 및 기능의 중요한 변경 사항이 나열되어 있습니다.

라이선스 및 상표

Qt Print Support 모듈은 The Qt Company의 상용 라이선스에 따라 사용할 수 있습니다. 또한 무료 소프트웨어 라이선스에 따라 사용할 수 있습니다: GNU 약소 일반 공중 사용 허가서, 버전 3 또는 GNU 일반 공중 사용 허가서, 버전 2. 자세한 내용은 Qt 라이선스를 참조하십시오.

Adobe®는 PDF와 함께 자사 상표(로고 포함)를 사용하는 데 제한을 두고 있습니다(예: "Adobe PDF"). 지침은 www.adobe.com 을 참조하십시오.

© 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.