如何打印Qt对话框或窗口?

4

我该如何让Qt打印完整的对话框或窗口? 我可以使用外部程序(例如xwd)转储窗口内容并打印出来,但我更希望一切都能在Qt中完成。

2个回答

8

使用QPixmap::grabWidget(或者对于外部窗口使用QPixmap::grabWindow)。

QPixmap pix = QPixmap::grabWidget(myMainWindowWidget);

不确定您是否真的想将其打印到打印机上,如果是:

QPrinter printer(QPrinter::HighResolution);
QPainter painter;
painter.begin(&printer);    
painter.drawPixmap (0, 0, &pix);    
painter.end();

pix.grabWidget(myMainWindowWidget) 对我来说失败了。 我必须使用: QPixmap pix = QPixmap::grabWidget(myMainWindowWidget); - PiedPiper
QPixmap :: grabWidget 对我所需的足够好,但 Ariya 的解决方案 QWidget :: render() 更好。 - PiedPiper

8
你可以使用 grabWidget 获取对话框的像素图表示,本质上你将会打印像素图的像素,也就是说,对话框会被光栅化为屏幕分辨率,然后缩放到打印机分辨率。这可能会导致一些伪影。
另一种方法是使用 QWidget::render() 函数,并传递打印设备作为参数。这样,你可以将打印机作为绘制设备来绘制对话框,以达到打印机的分辨率。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接