QT开发:如何解决QPrintDialog: Cannot be used on non-native printers?

QT开发:
我调用打印机失败,控制台输出如下:

img

是在

img


这一行代码上出错的,程序根本没有进入if判断。
我该怎么办?

在Qt中,如果你在非本机打印机上使用QPrintDialog,就会出现 "QPrintDialog: Cannot be used on non-native printers " 的错误。这是因为QPrintDialog只能用于本机打印机,无法与远程打印机进行通信。

要解决这个问题,你可以通过手动创建QPagedPaintDevice类并将其与远程打印机关联,然后使用该对象来进行打印操作。具体步骤如下:

1.创建一个QPrinter对象,并设置其输出格式为QPrinter::PdfFormat(或其他格式)。

QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
  1. 创建一个QPagedPaintDevice类,然后将其与QPrinter对象相关联。
QPagedPaintDevice *paintDevice = printer.paintEngine()->paintDevice();
  1. 将QPagedPaintDevice转换为QPrinter对象并设置其输出格式和设备名称。
QPrinter *remotePrinter = qobject_cast<QPrinter*>(paintDevice);
remotePrinter->setOutputFormat(QPrinter::NativeFormat);
remotePrinter->setPrinterName("Remote Printer Name");
  1. 创建一个QPrintDialog对象并设置打印机为remotePrinter。
QPrintDialog printDialog(remotePrinter);
  1. 调用QPrintDialog::exec()方法打开对话框,然后处理用户的打印操作。
if (printDialog.exec() == QDialog::Accepted) {
    // 打印操作
}

这样就可以在Qt中连接到远程打印机了,上面只是一个大概的demo,我自己也没进行过测试,实际的话,还得需要你进行修改适配