Печать в отдельном потоке |
Здравствуйте, гость ( Вход | Регистрация )
Печать в отдельном потоке |
RazrFalcon |
3.7.2013, 13:49
Сообщение
#1
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Простейший пример:
Проблема в следующем: при печати pdf - все работает отлично, но при печати на реальный принтер получаю варнинг QPixmap: It is not safe to use pixmaps outside the GUI thread Дока говорит QPixmap в потоке использовать нельзя, а можно QImage, и именно его я и использую... В итоге из-за варнингов этих на печати у меня пустые страницы... При том что drawLine и прочие примитивы печатает нормально. Не хочет только QImage. В чем может быть проблема? Сообщение отредактировал RazrFalcon - 3.7.2013, 18:52 |
|
|
Litkevich Yuriy |
3.7.2013, 18:20
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Возможно сам Q-принтер (внутри использует QPixmap). Как вариант печатать только из главного потока (организовав очередь), а в эту очередь помещать QImage из разных потоков.
|
|
|
Iron Bug |
3.7.2013, 18:31
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
я не спец в Qt, но у тебя объекты разные: в поток ты перенёс объект класса Print, а вызываешь метод класса PrintBook. скорее всего, часть класса PrintBook не будет адаптирована для работы в потоке.
|
|
|
RazrFalcon |
3.7.2013, 18:53
Сообщение
#4
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Iron Bug, опечатка, поправил
Litkevich Yuriy, так в том то и беда, что в основном потоке прога фризится. Да и QPrinter в pdf то нормально пишет. А на реальный принтер уже не хочет... Попробую QImage рендерить в потоке, может и выгорит. Сообщение отредактировал RazrFalcon - 3.7.2013, 18:55 |
|
|
RazrFalcon |
3.7.2013, 19:39
Сообщение
#5
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Цитата Как вариант печатать только из главного потока (организовав очередь), а в эту очередь помещать QImage из разных потоков. Все тормоза именно в painter.drawImage() и его то я не могу вынести в поток... |
|
|
Litkevich Yuriy |
3.7.2013, 20:51
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Попробую QImage рендерить в потоке, может и выгорит. а я понял, что ты его уже и используешь:а можно QImage, и именно его я и использую... К стати, по моим субъективным наблюдениям Qt::SmoothTransformation заставляет заметно потеть функцию масштабирования. |
|
|
RazrFalcon |
3.7.2013, 21:22
Сообщение
#7
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Да, почти в два раза дольше, но картинка лучше немного.
В общем идея вынести печать полностью в поток, а не частично. Пока никак... |
|
|
Litkevich Yuriy |
3.7.2013, 22:15
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
В общем, проверь у себя такую вещь: использование одного экземпляра QPrinter в разных потоках - источник проблем.
Пробуй создать экземпляр принтера в неком потоке и всю печатную обработку суй в этот же поток. |
|
|
RazrFalcon |
4.7.2013, 12:51
Сообщение
#9
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
В общем да, по сути в этом и должна была быть проблема.
Вот тут дали развернутый ответ: http://qt-project.org/forums/viewthread/29549/ Но проблема осталась, даже когда абсолютно все создано в потоке... |
|
|
Алексей1153 |
5.7.2013, 8:54
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
как вариант - сериализировать QImage в файл, затем запустить вспомогательный процесс, который этот файл распечатает. Грабли, конечно. Вообще, эта заморочка Qt с зависимостью GUI от потока напрягает...
|
|
|
Текстовая версия | Сейчас: 6.10.2024, 17:33 |