Добрый день, форумчане.
Сделал вывод QTableWidget в PDF и сейчас все работает, но при этом замирает GUI, может на несколько минут (в зависимости от размера таблицы).
Решил вынести в отдельный поток. Сделал следующее:
#ifndef CTHREAD_H
#define CTHREAD_H
//----------------
#include <QObject>
#include <QPrinter>
#include <QTextDocument>
#include <QDebug>
//---------------------------
class CThread: public QObject
{
Q_OBJECT
public:
explicit CThread(QTextDocument* document, QObject* parent = nullptr);
signals:
void finished();
public slots:
void print();
private:
QTextDocument* m_document;
};
#endif // CTHREAD_H
#include "cthread.h"
//---------------------------------------------------------
CThread::CThread(QTextDocument* document, QObject* parent):
QObject(parent),
m_document(document)
{
}
//-------------------
void CThread::print()
{
QPrinter* printer = new QPrinter(QPrinter::ScreenResolution);
printer->setOutputFormat(QPrinter::PdfFormat);
printer->setPaperSize(QPrinter::A4);
printer->setPageMargins(15, 0, 0, 0, QPrinter::Millimeter);
printer->setOutputFileName("reports/report.pdf");
m_document->print(printer);
emit finished();
delete printer;
}
Запускаю так:
// выводим на печать через отдельный поток
QThread* thread = new QThread;
CThread* print_thread = new CThread(reportPDF);
print_thread->moveToThread(thread);
connect(thread, &QThread::started, print_thread, &CThread::print);
// connect(print_thread, &CThread::finished, [this]
// {
// });
thread->start();
Все работает, но получаю вывод предупреждений:
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTextDocument(0x22e8d0d0), parent's thread is QThread(0x1b91c010), current thread is QThread(0x22e8d3f0)
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTextDocument(0x22e8d0d0), parent's thread is QThread(0x1b91c010), current thread is QThread(0x22e8d3f0)
QThread: Destroyed while thread is still running
Как избавиться от этих предупреждений?
Спасибо.