【发布时间】:2015-02-05 20:04:45
【问题描述】:
我正在尝试在不使用 QPrintDialog 的情况下实例化打印机,因为我们的 GUI 是 QML,而 QPrintDialog 不存在(我们正在 QML 中创建打印机选择对话框)。我正在调用两个可调用的 C++ 函数 1) 一个函数检索有效打印机列表并将其传递回 QML,2) 第二个函数实例化用户在 QML 中选择的打印机名称,然后打印给画家。我正在使用带有 Qt5.4.0 的 Ubuntu Linux (32)。我发现的一个有趣问题是,当我使用 QPrinterInfo::availablePrinterNames() 时,会找到有效的打印机名称列表。当我通过使用静态函数 QPrinterInfo::availablePrinters() 获取 QPrinterInfo 对象列表,然后遍历列表并在打印机名称中显示名称时,返回一个空字符串。文档说这应该是打印机的唯一 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 版本。有人有什么提示吗?
谢谢
【问题讨论】:
-
刚刚在 Windows 5.4.0 版本中运行了这个控制台应用程序,它运行良好。在项目文件中还有一个 QT += core printsupport 用于 linux 和 windows 项目文件。
-
FWIW,我得到了两个函数的相同列表。运行 Gentoo amd64,qt-5.4.0。编译与
g++ runme.cpp -I /usr/include/qt5/QtCore/ -I /usr/include/qt5/ -fPIC -lQt5Core -lQt5PrintSupport -
无辜的旁观者:感谢您在您的系统上运行。嗯,可能是我的环境。我忘记提及的一个细节是,我在一个适用于 Ubuntu 14.10 的 VMWare VM 中运行,可能是我的 Linux 环境,所以我将尝试在其他一些本地运行的 Linux 机器上(而不是在 VM 中)。
-
我在 2 台未在 VM 中运行的 Linux 机器上运行此测试程序 - 工作正常,因此我的 VM 或 VM 中的包设置肯定存在问题。
-
SportPilot,似乎如此。 FWIW,我会尝试重新安装
cups和相关的Qt库。