访问宇宙 2023-04-27 12:20 采纳率: 80.4%
浏览 71
已结题

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

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

img

是在

img


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

  • 写回答

1条回答 默认 最新

  • Ltd Pikashu CSDN实力新星 2023-05-01 12:52
    关注

    在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,我自己也没进行过测试,实际的话,还得需要你进行修改适配

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 4月27日

悬赏问题

  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥15 没输出运行不了什么问题
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果