【问题标题】:How can I know which printer is selected我如何知道选择了哪台打印机
【发布时间】:2021-10-09 14:41:35
【问题描述】:

我有一个带有典型打印机对话框的程序(使用 Qt5.1 中的 QPrintDialog 制作),您可以在其中从列表中选择所需的打印机。假设您有printerA(默认选择)、printerB、printerC 和printerD。我的打印机有问题,所以当用户选择它时,我想做一些事情(可能显示弹出消息或禁用某些按钮)。

我一直在寻找如何知道是否选择了printerD 但找不到它。我在QPrinterQPrinterInfoQPrintDialogQDialog 中搜索,但找不到。另外我在这里找到了this,虽然它可以帮助我,但答案只告诉你如何设置默认值。

如果你不知道我说的是哪个对话框,那和here一样。

我也在考虑这个列表是否可能是一个 QListWidget 类,但如果是这样,我不知道如何获得它。

所以我的问题是:我如何知道在此 PrinterDialog 生命的任何时刻选择了哪台打印机? (出现时)。

另外,我想补充一点,我试图禁用打印机的按钮,这给了我下一个代码的错误,但 QList 是空的,所以我无法使用打印或首选项按钮来禁用它我没有'不知道为什么:

 QList<QPrinterInfo> info_list = QPrinterInfo::availablePrinters();
 foreach(QPrinterInfo info, info_list)
 {
     if (info.state() == 3) // the printer gives error
     {
        QList<QPushButton *> allButtons = printDialog.findChildren<QPushButton *>();

       for (int i = 0; i < allButtons.size(); i++) 
       {
          if (allButtons.at(i)->text().contains("Print") || allButtons.at(i)->text().contains("Preferences"))
          {
           allButtons.at(i)->setDisabled(true);
          }
       }
     }
  }

提前谢谢你。

【问题讨论】:

    标签: c++ qt c++11 printing qprinter


    【解决方案1】:

    您可能正在寻找打印机名称:QPrinter::printerName

    QPrinter printer;
    QPrintDialog printDialog(printer);
    if (printDialog.exec() == QDialog::Accepted) {
        // executed after the print dialog is closed and accepted.
        if (printer.printerName() == "printerD") {
            // show a message or do something special ...
        }
        // print ...
    }
    

    请注意,QPrintDialog 不提供在打印机对话框仍处于打开状态(尚未接受)时检查所选打印机的任何方法。使用诸如使用findChildren 等未记录的hack 将无法以跨平台方式工作,因为可能会使用本机打印对话框[1]

    在 Windows 和 macOS 上,使用本机打印对话框,这意味着 对话框上设置的一些 QWidget 和 QDialog 属性不会 尊重。 macOS 上的原生打印对话框不支持设置 打印机选项,即 setOptions() 和 setOption() 无效。

    如果您真的想要/需要实时确定打印机选择,您应该实现自己的自定义打印机对话框。

    【讨论】:

    • 感谢您的帮助。我担心我不能使用 i 因为它是原生的。我尝试按照您所说的那样使用它,但它不起作用,因为当执行 .exec() 时它会打开打印对话框并停留在那里,所以如果我在列表中选择不同的打印机,它不会意识到它,但还是谢谢你.
    • QDialog::exec 确实打开了一个对话框,只有在对话框关闭后才返回。
    • 是的,这就是为什么我要在它打开的时候找点事情做,因为我里面有一个崩溃,所以我需要在关闭它之前完成一个操作
    • 如果崩溃发生在打印对话框内,最好将其报告为 Qt 错误或打印机的驱动程序错误。如果用户不应该使用这台打印机,卸载它可能是最好的解决方案。您可以考虑针对您遇到的崩溃提出一个单独的问题。
    猜你喜欢
    • 2018-11-29
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多