linux qt中不支持QPrinter是怎么回事
时间: 2024-01-02 10:01:45 浏览: 44
在Linux中,Qt的QPrinter类无法支持所有的打印机,这是因为不同的打印机厂商可能使用不同的打印机驱动程序和API。在Windows和MacOSX中,Qt可以通过使用操作系统提供的打印机驱动程序来解决这个问题。但是在Linux中,Qt无法使用这些驱动程序,因此需要使用CUPS(通用UNIX打印系统)或其他打印机驱动程序来实现打印功能。但是,使用CUPS或其他驱动程序可能会导致Qt的QPrinter类在Linux中无法支持某些打印机。
相关问题
linux下qt使用qprinter设置打印机从哪个纸盒出纸(不使用ui界面)
您可以使用QPrinter类中的setPaperSource函数设置打印机选用的纸盒。
例如,以下代码将打印机设置为使用纸盒2:
```
QPrinter printer;
printer.setPaperSource(QPrinter::Envelope);
```
请注意,需要先创建QPrinter对象并设置打印机属性,然后才能在执行打印操作时使用它。
linux环境下 使用QT QPrinter类emf库(GetEnhMetaFile方式) 对emf文件进行展示 要有代码示例
以下是使用QT QPrinter类emf库(GetEnhMetaFile方式) 对emf文件进行展示的示例代码:
```cpp
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.setWindowTitle("EMF Viewer");
QVBoxLayout *layout = new QVBoxLayout(&window);
QScrollArea *scrollArea = new QScrollArea(&window);
layout->addWidget(scrollArea);
QLabel *label = new QLabel(scrollArea);
scrollArea->setWidget(label);
QString fileName = QFileDialog::getOpenFileName(&window, "Open EMF File", QString(), "EMF Files (*.emf)");
if (!fileName.isEmpty()) {
HDC hdc = ::CreateEnhMetaFile(NULL, fileName.toLocal8Bit().constData(), NULL, NULL);
if (hdc) {
::CloseEnhMetaFile(hdc);
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::NativeFormat);
printer.setOutputFileName(fileName);
QPainter painter(&printer);
if (painter.begin(&printer)) {
painter.drawEnhMetaFile(GetEnhMetaFile(fileName.toLocal8Bit().constData()), QRect());
painter.end();
}
QPixmap pixmap(fileName);
label->setPixmap(pixmap);
}
}
window.show();
return app.exec();
}
```
该示例首先使用 `QFileDialog` 获取要打开的 EMF 文件的路径,然后使用 `CreateEnhMetaFile` 函数创建一个设备上下文句柄,用于在 EMF 文件中绘制图形。然后使用 `QPrinter` 类将 EMF 文件输出到指定的打印机或文件中。最后,使用 `QLabel` 显示 EMF 文件的内容。
需要注意的是,使用 `GetEnhMetaFile` 函数获取 EMF 文件的句柄时,需要使用文件的路径而不是文件名。