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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как ускорить появление QPrintPreviewDialog?  (Прочитано 4906 раз)
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« : Май 24, 2016, 14:12 »

Qt5.6 Win7 У меня время появления диалога ~ 4-5 сек. Порой кажется что на кнопку печати не нажал и нажимаю еще раз, или же что приложение подвисло. С чем связана такая заторможенность? Как ускорить появление?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Май 24, 2016, 14:43 »

Может показывать какой нибудь прогресс-бар, пока окно не появилось?

Ну или, лезть в внутренности и смотреть что вызывается из нативного и замерять время выполнения
Записан

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

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 24, 2016, 15:29 »

Ну или, лезть в внутренности и смотреть что вызывается из нативного и замерять время выполнения
Ну допустим нашли какой-то нативный вызов который тормозит - и что с того?

Может показывать какой нибудь прогресс-бар, пока окно не появилось?
Хорошая мысль, но как потом этот бар закрыть?

Qt5.6 Win7 У меня время появления диалога ~ 4-5 сек. Порой кажется что на кнопку печати не нажал и нажимаю еще раз, или же что приложение подвисло. С чем связана такая заторможенность? Как ускорить появление?
У меня открытие печати из IDE тоже хорошие секунды (хотя и принтера-то нет), видимо шансов "ускорить" немного
« Последнее редактирование: Май 24, 2016, 16:38 от Igors » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Май 24, 2016, 15:41 »

Мое дело предложить варианты Улыбающийся

Хорошая мысль, но как потом этот бар закрыть?

При сильном желании можно нативными способами узнать об открытии окна, если оно не подконтрольно программе автора.
Записан

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

Сообщений: 2679


Я работал с дискетам 5.25 :(


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

Возможно, эта фигня опрашивает сеть (ищет сетевые принтеры) или что-то в этом роде.
Можно попробовать при старте проги создавать скрытый диалог, а потом при необходимости его показывать.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Май 25, 2016, 09:17 »

Возможно, эта фигня опрашивает сеть (ищет сетевые принтеры) или что-то в этом роде.
Можно попробовать при старте проги создавать скрытый диалог, а потом при необходимости его показывать.
Вот когда это "потом"? Ведь главная нитка занята. Можно создать еще нитку и там определить что истекло значительное время - но сделать show нечем (UI только в главной).

Думаю приемлемый вариант такой: сразу выскочить с QProgressDialog и закрыть его по событию. Напр QEvent::FocusIn должно приходить для диалога принтера
Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #6 : Май 25, 2016, 09:29 »

Выяснилось, как разъясняет https://bugreports.qt.io/browse/QTBUG-44291, задержка происходит при создании QPinter в src/plugins/printsupport/windows/qwindowsprintdevice.cpp:238:QWindowsPrintDevice::printableMargins() (This is slow, need to cache values or find better way! Modify the DevMode to get the DC printable margins in device pixels) .

Теперь надо показать юзеру, что наша прога не зависла, а лишь слегка задумалась. Идея со скрытым окном не прокатит, за время работы проги, юзер может изменит дефолтный принтер и нам надо по новой его инициализировать. ПрогрессДиалог то же не пойдет, он будет тупо висеть без индикатора.
« Последнее редактирование: Май 25, 2016, 09:35 от poru » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Май 25, 2016, 11:18 »

Выяснилось, как разъясняет https://bugreports.qt.io/browse/QTBUG-44291, задержка происходит при создании QPinter в src/plugins/printsupport/windows/qwindowsprintdevice.cpp:238:QWindowsPrintDevice::printableMargins() (This is slow, need to cache values or find better way! Modify the DevMode to get the DC printable margins in device pixels) .
Багаж бесполезных знаний успешно пополнен  Улыбающийся

Идея со скрытым окном не прокатит ..
..
ПрогрессДиалог то же не пойдет, он будет тупо висеть без индикатора.
Вы резво отвергаете вполне разумные советы - но найдется ли у Вас что-то лучшее? Подобные ситуации часто возникают там и сям - главная нитка занята, и обновить UI некому. Какое-то общее/cтандартное решение этой проблемы мне неизвестно. Часто рекомендуют "вынос в поток" - но не уверен возможно ли это для диалога принтера.
Записан
poru
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« Ответ #8 : Май 25, 2016, 15:58 »

Подобные ситуации часто возникают там и сям - главная нитка занята, и обновить UI некому. Какое-то общее/cтандартное решение этой проблемы мне неизвестно. Часто рекомендуют "вынос в поток" - но не уверен возможно ли это для диалога принтера.
Вынесем туда принтер, а диалог будет ждать finished.

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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