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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: огромный размер документа для печати сцены  (Прочитано 5585 раз)
romanick
Гость
« : Май 13, 2011, 07:54 »

Добрый день!
Печатаю сцену с помощью QPrinter, всё замечательно, только размер получившегося job-а, который отправляется на принтер просто огромен.
Печатаю так:
Код:
QPainter painter(&printer);
scene.render(&painter);
Например, размер сцены 1024х768, а размер job, который виден в системной очереди печати Windows, составляет почти 20 Мб. Для примера job этой страницы весит 3 Мб.
Понимаю, что где-до надо задать разрешение, но если уменьшаю QPrinter::setResolution со стандартных 96dpi до 48dpi качество печати резко снижается.
Что я ещё не сделал?
Записан
Alucard
Гость
« Ответ #1 : Май 13, 2011, 10:02 »

Вас смущает что размер 3 а выводит 20?

Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Май 13, 2011, 11:07 »

Цитировать
Например, размер сцены 1024х768, а размер job, который виден в системной очереди печати Windows, составляет почти 20 Мб. Для примера job этой страницы весит 3 Мб.
Это ни о чём ни говорит. Вполне возможно, что отрисовка делается не оптимально.
Распечатай в файл и уже его изучай.
Записан

Qt 5.11/4.8.7 (X11/Win)
romanick
Гость
« Ответ #3 : Май 13, 2011, 17:29 »

Цитировать
Например, размер сцены 1024х768, а размер job, который виден в системной очереди печати Windows, составляет почти 20 Мб. Для примера job этой страницы весит 3 Мб.
Это ни о чём ни говорит. Вполне возможно, что отрисовка делается не оптимально.
Распечатай в файл и уже его изучай.
Не совсем понял что значит "отрисовка делается не оптимально". Я как-то могу на это влиять? Пустая сцена с одним-едиственным прямоугольником QGraphicsRectItem растянутым на всю сцену уже занимает в памяти принтера 1 Мб. Если убрать этот прямоугольник - то размер сразу падает до 2,5 Кб.
И в какой доступный для изучения файл я могу распечатать сцену?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Май 13, 2011, 17:39 »

Цитировать
Не совсем понял что значит "отрисовка делается не оптимально". Я как-то могу на это влиять?
Конечно, например, рисовать на одном и том же месте несколько раз одно и тоже.

Цитировать
Пустая сцена с одним-едиственным прямоугольником QGraphicsRectItem растянутым на всю сцену уже занимает в памяти принтера 1 Мб.
Сглаживание используется?

Цитировать
И в какой доступный для изучения файл я могу распечатать сцену?
pdf, postscript
Записан

Qt 5.11/4.8.7 (X11/Win)
romanick
Гость
« Ответ #5 : Май 13, 2011, 18:29 »

Конечно, например, рисовать на одном и том же месте несколько раз одно и тоже.
Получается что каждый элемент сцены отправляется на принтер отдельно? И каждый печатает на одном и том же месте?

Цитировать
Сглаживание используется?
painter.setRenderHint(QPainter::Antialiasing); - отключил. ситуация не поменялась
Записан
romanick
Гость
« Ответ #6 : Май 14, 2011, 11:09 »

Разобрался. Но мне от этого не легче. Всё дело в волшебных пузырьках стиле QPen. Если используется например DotLine, то размер job-а увеличивается на 2 порядка. Как это можно оптимизировать?Непонимающий
Вот простой пример, иллюстрирующий проблему:

   
Код:
QGraphicsView tmp_view(this);
    QGraphicsScene tmp_scene(this);
    tmp_view.setScene(&tmp_scene);

    QPrinter printer;
    QPainter painter(&printer);

    QSize s(1024, 768);
    scene.setSceneRect(QRectF(QPointF(0,0), s));
    scene.addRect(QRectF(QPointF(0,0), s), QPen(), QBrush(Qt::white));

    //Вариант 1. 693 Кб
    //scene.addRect(QRectF(QPointF(100,100), QPoint(1000, 690)), QPen(Qt::DotLine));
    //Вариант 2. 1,62 Кб
    scene.addRect(QRectF(QPointF(100,100), QPoint(1000, 690)), QPen(Qt::SolidLine));

    tmp_view.show();
    scene.render(&painter);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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