Fáb*_*nes 5 c++ printing segmentation-fault qt5
我正在尝试通过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();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我通过调试器运行它时,会SIGSEGV Segmentation fault在该drawText方法上收到信号。
打印机已连接,安装,当我打电话时,qDebug() << printer.printerName();我得到了应该使用的打印机的正确名称。
有人知道为什么会引发此错误SIGSEGV Segmentation fault吗?
谢谢。
为了QPrinter工作,您需要一个QGuiApplication,而不是一个QCoreApplication.
这记录在QPaintDevice文档中:
警告: Qt 要求
QGuiApplication在创建任何绘制设备之前对象存在。绘制设备访问窗口系统资源,这些资源在创建应用程序对象之前不会被初始化。
请注意,至少在基于 Linux 的系统上,offscreenQPA 在这里不起作用。
#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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |