gpt4 book ai didi

c++ - 如何在 Qt 中打印 QWidget?

转载 作者:太空狗 更新时间:2023-10-29 20:34:58 24 4
gpt4 key购买 nike

我需要知道如何将 QWidget 打印为 PDF 文件。 Widget (QDialog) 包含很多标签、一些 QPlainTextEdit 和背景图像。该对话框显示了一张收据,其所有字段均已填写。

我已经尝试为此目的使用 QTextDocument 和 html,但是收据的复杂性(大量图像和格式自定义)使 html 输出完全困惑。

这是文档。

收据图片

最佳答案

您必须使用 QPrinter,这是您必须使用的对象,需要 QPainter 才能在 QPrinter 中绘制小​​部件。

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog w;

w.setLayout(new QVBoxLayout());
w.layout()->addWidget(new QLineEdit("text"));
w.layout()->addWidget(new QPushButton("btn"));
w.layout()->addWidget(new QPlainTextEdit("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris rutrum magna semper nisi faucibus, at auctor dolor ullamcorper. Phasellus facilisis blandit augue sit amet placerat. Aliquam nec imperdiet diam. Proin dignissim vulputate metus, nec tincidunt magna vulputate ac. Praesent vel felis ac dolor viverra tempus eu vitae neque. Nulla efficitur gravida arcu id suscipit. Maecenas placerat egestas velit quis interdum. Nulla diam massa, hendrerit vitae mi et, placerat aliquam nisl. Donec tincidunt lobortis orci, quis egestas augue tempus sed. Nulla vel dolor eget ipsum accumsan placerat ut at magna."));
w.show();

QPushButton btn("print");
btn.show();

QObject::connect(&btn, &QPushButton::clicked, [&w](){
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("output.pdf");
printer.setPageMargins(12, 16, 12, 20, QPrinter::Millimeter);
printer.setFullPage(false);

QPainter painter(&printer);

double xscale = printer.pageRect().width() / double(w.width());
double yscale = printer.pageRect().height() / double(w.height());
double scale = qMin(xscale, yscale);
painter.translate(printer.paperRect().center());
painter.scale(scale, scale);
painter.translate(-w.width()/ 2, -w.height()/ 2);
w.render(&painter);
});

return a.exec();
}

小部件:

enter image description here

输出.pdf

enter image description here

关于c++ - 如何在 Qt 中打印 QWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45467942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com