crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Печать QwtPlot и QTextBrowser
qx87
  опции профиля:
сообщение 24.9.2015, 15:23
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 24.9.2015
Пользователь №: 4456

Спасибо сказали: 0 раз(а)




Репутация:   0  


Использую Qt 5.4.

Задача в том, что нужно распечатать график (QwtPlot из библиотеки Qwt) и на следующей странице - содержимое QTextBrowser (производный объект от QTextEdit). И чтобы при этом работал предпросмотр через QPrintPreviewDialog.

Проблема в том, что для печати графика клас QwtPlotRenderer требует объект QPainter. (Там есть методы, где подойдёт и QPrinter, но мне нужен именно этот - для указания области вывода) А для печати QTextBrowser/QTextEdit требуется QPrinter (см. последний абзац).

Поэтому если использовать такой код

    QPainter printPainter;
    printPainter.begin(printer);
    plotRenderer.render(qwtPlot, painter, plotRect);
    printer->newPage();
    textbrowser->print(printer);
    printPainter.end();


то в stderr появляется сообщение
Цитата
QPainter::begin: A paint device can only be painted by one painter at a time.

а на печать попадает только график и пустая страница.

А если поменять две последние строки местами:

    QPainter printPainter;
    printPainter.begin(printer);
    plotRenderer.render(qwtPlot, painter, plotRect);
    printer->newPage();
    printPainter.end();
    textbrowser->print(printer);


тогда вызов printer->newPage() возвращает false, в stderr появляется
Цитата
QPrinter::metric: Invalid metric command


на предпросмотре появляется только текст из QTextBrowser, а мой виртуальный принтер doPdf вызывается два раза и создаёт два файла pdf: с графиком и с текстом.

Как разрешить проблему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 25.9.2015, 18:36
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Видится два варианта:
1. Нарисовать документ, используя пэинтер:
http://doc.qt.io/qt-5/qtextdocument.html#drawContents
2. Вставить нарисованный график в документ и распечатать документ целиком
http://doc.qt.io/qt-5/qtextcursor.html#insertImage-4
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 11:47