Как распечатать виджет в PDF только с минимальным содержанием? - PullRequest
0 голосов
/ 24 февраля 2020

Я печатаю виджет (вкладку из QTabWidget) с его содержимым с этим кодом:

void MainWindow::print()
{
    quint8 tabIndex = quint8(ui->tabWidget->currentIndex());
    CharacterSheetWidget* widget = dynamic_cast< CharacterSheetWidget* >( ui->tabWidget->widget(tabIndex) );
    QString filePath = QFileDialog::getSaveFileName(this, QString(tr("Print as PDF...")), QString(), "PDF file (*.pdf)");

    if(filePath.isEmpty())
        return;

    QPrinter printer;
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(filePath);
    printer.setPaperSize(QPrinter::A4);
    printer.setResolution(300);
    printer.setFullPage(false);
    printer.setPageMargins(5, 5, 5, 5, QPrinter::Millimeter);

    QString originalStyle = widget->styleSheet();
    widget->setStyleSheet("background-color:white;");

    QPainter painter;
    painter.begin(&printer);
    double xscale = printer.pageRect().width() / double(widget->width());
    double yscale = printer.pageRect().height() / double(widget->height());
    double scale = qMin(xscale, yscale);
    painter.translate(printer.paperRect().center());
    painter.scale(scale, scale);
    painter.translate(- widget->width()/ 2, - widget->height()/ 2);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
    widget->render(&painter);
    painter.end();
    widget->setStyleSheet(originalStyle);
}

, но он печатает его с большим количеством места справа и снизу. Я хотел бы напечатать его с минимальной областью содержимого.

Например, на этом изображении вы видите, что оно печатает красную область в PDF, я хотел бы, чтобы оно печатало синюю область.

Как мне поступить (если вам нужна дополнительная информация, пожалуйста, скажите мне)?

1 Ответ

0 голосов
/ 27 февраля 2020

Кстати, я нашел решение: перед «QPainter Painter;» я добавил этот код:

QSize minSize = widget->minimumSizeHint();
int minWidth = minSize.width();
int minHeight = minSize.height();

И заменил все widget-> width () и widget-> height на minWidth и MinHeight.

...