我试图通过Qt5打印方法在热敏打印机中打印简单的文字信息。
#include <QCoreApplication>
#include <QDebug>
#include <QtPrintSupport/QPrinterInfo>
#include <QtPrintSupport/QPrinter>
#include <QtGui/QPainter>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QPrinter printer(QPrinter::ScreenResolution);
QPainter painter;
painter.begin(&printer);
painter.setFont(QFont("Tahoma",8));
painter.drawText(0,0,"Test");
painter.end();
return a.exec();
}
但是,当我通过调试器运行时,我会在SIGSEGV Segmentation fault
方法上收到drawText
信号。
打印机已连接,已安装,当我拨打qDebug() << printer.printerName();
时,我得到了应该使用的打印机的正确名称。
任何人都知道为什么会抛出此错误&#34; SIGSEGV Segmentation fault
&#34;?
谢谢。
答案 0 :(得分:4)
要QPrinter
工作,您需要QGuiApplication
,而不是QCoreApplication
。
QPaintDevice
docs:
警告: Qt要求在创建任何绘图设备之前存在
QGuiApplication
对象。绘制设备访问窗口系统资源,并且在创建应用程序对象之前不会初始化这些资源。
请注意,至少在基于Linux的系统上,offscreen
QPA在此处不起作用。
#include <QCoreApplication>
#include <QDebug>
#include <QtPrintSupport/QPrinterInfo>
#include <QtPrintSupport/QPrinter>
#include <QtGui/QPainter>
#include <QGuiApplication>
#include <QTimer>
int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);
QPrinter printer;//(QPrinter::ScreenResolution);
// the initializer above is not the crash reason, i just don't
// have a printer
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("nw.pdf");
Q_ASSERT(printer.isValid());
QPainter painter;
painter.begin(&printer);
painter.setFont(QFont("Tahoma",8));
painter.drawText(0,0,"Test");
painter.end();
QTimer::singleShot(0, QCoreApplication::instance(), SLOT(quit()));
return a.exec();
}