I'm trying to print a simple text message in a thermal printer through Qt5 printing methods.
#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();
}
However when I run it through the debugger I get a SIGSEGV Segmentation fault signal on the drawText method.
The printer is connected, installed and when I call qDebug() << printer.printerName(); I get the correct name of the printer that should be used.
Anyone knows why is this error being thrown "SIGSEGV Segmentation fault"?
Thank you.
For QPrinter to work you need a QGuiApplication, not a QCoreApplication.
This is documented in QPaintDevice docs:
Warning: Qt requires that a
QGuiApplicationobject exists before any paint devices can be created. Paint devices access window system resources, and these resources are not initialized before an application object is created.
Note that at least on Linux-based systems the offscreen QPA will not work here.
#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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With