Как я могу проверить, может ли объект QPdfWriter записывать в указанный файл? - PullRequest
0 голосов
/ 10 февраля 2019

Я создаю документы PDF в Qt, используя команду:

QPdfWriter *pdf;
pdf = new QPdfWriter(filename);

Иногда объект не создается из-за неправильного имени файла или документ существует и открыт в другом приложении ...

Как проверить, был ли создан объект (если указатель pdf указывает на действительный объект)?

РЕДАКТИРОВАТЬ: Моя ошибка была в том, что объект не был создан.Это не правда.Объект QPdfWriter создан, но нет сгенерированных исключений или ошибок.Я могу установить некоторые свойства.Проблема возникнет позже, когда я попытаюсь что-то записать в документ - см. Комментарии трех последних команд:

pdf->setParent(this);
pdf->setPageSize(QPdfWriter::A4);
pdf->setPageOrientation(QPageLayout::Orientation::Landscape);
QPainter *p = new QPainter(pdf); //got message: QPainter::begin(): Returned false
ui->chartView->render(p); // no error
p->end(); // got message: QPainter::end: Painter not active, aborted

Я прочитал документацию QpdfWriter и родительских классов QPagedPaintDevice и QPaintDevice .Я не могу найти какое-либо свойство / метод, чтобы проверить, могу ли я написать в документ ...

Итак, вопрос - как проверить, могу ли я написать в документ?

1 Ответ

0 голосов
/ 09 августа 2019

Я только что наткнулся на ту же проблему, намек на bool QFileInfo::isWritable() const не помог мне.Хотя вы в основном дали ответ с комментарием к третьей последней команде, с возвращаемым значением QPainter::begin() вы можете проверить, может ли QPdfWriter сгенерировать pdf.

QPainter *p = new QPainter;
if (p->begin(pdf)) { 
    ui->chartView->render(p); 
    p->end();
} else {
    // error message...
}
...