0

我想通过我的打印机打印一些消息,但是编译时什么也没有发生。我的代码有什么问题?

QPrinter printer(QPrinter::HighResolution);
printer.setCreator("Me");
printer.setDocName("Test1");

QPrintDialog *PrintConfiguration = new QPrintDialog(&printer,this);
PrintConfiguration->show();

QPainter *painter = new QPainter(&printer);
painter.drawText(10,10,ui->textEdit->toPlainText());
4

2 回答 2

0

问题就在这里:PrintConfiguration->show();
show()准备者小部件要显示并立即返回。所以结果是您在用户设法与 UI 进行任何交互之前尝试绘制并且您的打印机对象设置不正确。你想要一个阻塞方法:exec(). 正确的代码应如下所示:

QPrinter printer(QPrinter::HighResolution);
printer.setCreator("Me");
printer.setDocName("Test1");

QPrintDialog printDialog(printer, this);
if (printDialog.exec() == QDialog::Accepted) {
    QPainter painter(&printer);
    painter.drawText(10,10,ui->textEdit->toPlainText());
}
于 2013-09-09T13:33:38.457 回答
0

所呈现的代码不会做任何事情,因为您永远不会破坏画家或完成页面。你需要破坏画家:delete painter;printer.newPage()或者,如果您打印多页,则每次完成一页后都需要调用。

drawText很可能会在页面的不可打印区域中绘制。尝试:

painter->drawText(printer.pageRect(), ui->textEdit->toPlainText());
于 2013-09-09T12:41:54.837 回答