QT 5.4 QPrinterInfo :: printerName返回空白

问题描述 投票:1回答:1

我试图在不使用QPrintDialog的情况下实例化打印机,因为我们的GUI是QML,其中QPrintDialog不存在(我们在QML中创建打印机选择对话框)。我正在调用两个可调用的C ++函数1)一个函数检索有效打印机列表并将其传递回QML,以及2)第二个函数实例化用户在QML中选择的打印机名称,然后打印到画家。我在Qt5.4.0上使用Ubuntu Linux(32)。我发现的一个有趣的问题是,当我使用QPrinterInfo :: availablePrinterNames()时,找到了一个有效的打印机名称列表。当我通过使用静态函数QPrinterInfo :: availablePrinters()获取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版本。有人有任何提示吗?

谢谢

c++ linux qt printing
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.