Как сделать помощник печати для Qml в Cpp - PullRequest
0 голосов
/ 08 января 2019

Я создал этот класс для печати pdf-файлов из qml, он выдает ошибку при выполнении, ошибка появляется после нажатия какой-либо кнопки («мой qml-файл большой, поэтому я не поделился им»), проблема в любом случае не из файла qml выполняется программа и даже первая строка кода cpp. описание ошибки и коды:

мой заголовочный файл:

#ifndef PRINTERHELPER_H
#define PRINTERHELPER_H

#include <QObject>

class PrinterHelper : public QObject
{
    Q_OBJECT
public:
    explicit PrinterHelper(QObject *parent = nullptr);

public:
Q_INVOKABLE void print(QString data);

signals:

public slots:
};

#endif // PRINTERHELPER_H

мой файл cpp:

#include "printerhelper.h"
#include <QtPrintSupport/QPrinter>
#include <QPainter>
#include <QtPrintSupport/QPrintDialog>
#include <QPixmap>
#include <QImage>
#include <qdebug.h>
PrinterHelper::PrinterHelper(QObject *parent) : QObject(parent)
{

}
void  PrinterHelper::print(QString filename)
{
    qDebug()<<"Print file name is "<<filename;
    QPrinter printer(QPrinter::HighResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(filename);
    QPrintDialog *dlg = new QPrintDialog(&printer,0);
    dlg->setWindowTitle(QObject::tr("Print Document"));

    if(dlg->exec() == QDialog::Accepted) {
        QPainter painter;
        if (! painter.begin(&printer)) { // failed to open file
            qWarning("failed to open file, is it writable?");
            return;
        }
    }
    delete dlg;

}

Код Qml:

MouseArea{
       anchors.fill: parent
       onClicked: {                                  
           PRINT.print(file_directory+file_name)
       }
}

ошибка:

Print file name is  "C:/PishkhanTemp/saham_edalat/se_20190108150150.pdf"
QWidget: Cannot create a QWidget without QApplication
Debug Error!

Program: C:\QtN\Qt5.12.0\5.12.0\msvc2017\bin\Qt5Cored.dll
Module: 5.12.0
File: kernel\qwidget.cpp
Line: 1126

QWidget: Cannot create a QWidget without QApplication

и я уже изменился на #include <QApplication >
Обновление: ошибка : QPrintDialog: Не может использоваться на не родных принтерах

...