Russian Qt Forum
Сентябрь 21, 2024, 22:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Печать нескольких изображений  (Прочитано 2279 раз)
Nimbus
Гость
« : Сентябрь 09, 2010, 07:41 »

Доброго времени суток. Дело в том, что есть один принтер... Вооот... И нужно чтобы на него выводился PDF-документ. Документ рендерится на QLabel постранично. В виде обычного PNG, который я получаю через Ghostscript (прикрутил его к проге своей). Ну там добавил кнопочки для перелистывания страницы, для скейлинга, скроллбар, добавил. Получился очень неплохой виджет для просмотра PDF-документов. Но нужно ещё добавить возможность печати. Так вот, возникает вопрос - как учесть все настройки, которые указывают в QPrintDialog'е?
Пока что, я сделал так:
Код
C++ (Qt)
void PDFWidget::print() {
Q_ASSERT(imageLabel->pixmap());
QPrintDialog dialog(&printer, this);
if (dialog.exec()) {
foreach (QPixmap pixmap, sheets) {
QPainter painter(&printer);
QRect rect = painter.viewport();
QSize size = pixmap.size();
size.scale(rect.size(), Qt::KeepAspectRatio);
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(pixmap.rect());
painter.drawPixmap(0, 0, pixmap);
}
}
}
 
То есть у меня все изображения хранятся в списке пиксмапов sheets. И выводятся на печать сразу все. Так вот, если пользователь в этом диалоге укажет например, печатать не все страницы, а некоторый диапазон, то как мне поступить? Как изменить данный код для правильного вывода на печать по всем опциям? Про QAxWidget с адобе ридером не нужно говорить.

Итак... Изменил код цикла на
Код
C++ (Qt)
               for (int i = printer.fromPage(); i <= printer.toPage(); i++) {
QPainter painter(&printer);
QRect rect = painter.viewport();
QSize size = sheets[i].size();
size.scale(rect.size(), Qt::KeepAspectRatio);
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(sheets[i].rect());
painter.drawPixmap(0, 0, sheets[i]);
}
 
Всё замечательно. Работает как надо. Thanks a lot...
« Последнее редактирование: Сентябрь 09, 2010, 11:26 от JC » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.085 секунд. Запросов: 20.