QT 5.4 QPrinterInfo::printerName返回空白

QT 5.4 QPrinterInfo::printerName returns blanks

本文关键字:printerName 空白 返回 QPrinterInfo QT      更新时间:2023-10-16

我正在尝试在不使用QPrintDialog的情况下实例化打印机,因为我们的GUI是QML,而QPrintDial不存在(我们正在QML中创建打印机选择对话框)。我正在调用两个可调用的C++函数:1)一个函数检索有效打印机的列表并将其传递回QML;2)第二个函数实例化用户在QML中选择的打印机名称,然后打印给画家。我使用的是Ubuntu Linux(32)和Qt5.4.0。我发现的一个有趣的问题是,当我使用QPrinterInfo::available PrinterNames()时,会发现一个有效的打印机名称列表。当我使用静态函数QPrinterInfo::available Printers()获得QPrinterInfo对象的列表,然后遍历该列表并在printerName中显示名称时,会返回一个空字符串。文档中说,这应该是打印机的唯一ID,而不是空字符串?????

以下是一个演示问题的摘录:

#include <QCoreApplication>
#include <QString>
#include <QStringList>
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
#include <QtPrintSupport/QPrinterInfo>
#include <QDebug>
#include <QList>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "Printer names via availablePrinterNames method";
    QStringList name_list = QPrinterInfo::availablePrinterNames();
    foreach ( QString name, name_list)
        qDebug() << name;
    qDebug() << "nPrinter names via availablePrinters method";
    QList<QPrinterInfo> info_list = QPrinterInfo::availablePrinters();
    foreach ( QPrinterInfo info, info_list )
        qDebug() << info.printerName();
    return a.exec();
}

我没有在早期版本的QT或Windows版本中尝试过这种方法。有人有什么线索吗?

感谢

简而言之:问题的原因是CUPS支持无人驾驶打印机(info),而Qt不支持。

Qt使用CUPS API返回系统中打印机的列表(可用的打印机名称)而不进行检查,但当它构造QPrinterInfo时,它会检查打印机是否有PPD驱动程序。否则,打印机将被视为无效,Qt将为其返回空名称。

请尝试一下,它对我有效。首先,你应该将windowsprintersupport.dll添加到你的项目中。

int count = 0;
QList<QPrinterInfo> info_list = QPrinterInfo::availablePrinters();
    foreach ( QPrinterInfo info, info_list )
    {
        count++;
        qDebug()<< "Printer_"<< count<< ": " << info.printerName() << "State: " << info.state();
        if(info.printerName() == "YOUR_PRINTER_NAME")
        {
            if (info.state() == 0)
                qDebug()<< "Printer Idle";
            else if (info.state() == 1)
                qDebug()<< "Printer Active";
            else if (info.state() == 2)
                qDebug()<< "Printer Aborted";
            else if (info.state() == 3)
                qDebug()<< "Printer Error";
            else
                qDebug()<< "Printer Undefined Error";
        }
    }