Название: Как ускорить появление QPrintPreviewDialog? Отправлено: poru от Май 24, 2016, 14:12 Qt5.6 Win7 У меня время появления диалога ~ 4-5 сек. Порой кажется что на кнопку печати не нажал и нажимаю еще раз, или же что приложение подвисло. С чем связана такая заторможенность? Как ускорить появление?
Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: gil9red от Май 24, 2016, 14:43 Может показывать какой нибудь прогресс-бар, пока окно не появилось?
Ну или, лезть в внутренности и смотреть что вызывается из нативного и замерять время выполнения Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: Igors от Май 24, 2016, 15:29 Ну или, лезть в внутренности и смотреть что вызывается из нативного и замерять время выполнения Ну допустим нашли какой-то нативный вызов который тормозит - и что с того?Может показывать какой нибудь прогресс-бар, пока окно не появилось? Хорошая мысль, но как потом этот бар закрыть?Qt5.6 Win7 У меня время появления диалога ~ 4-5 сек. Порой кажется что на кнопку печати не нажал и нажимаю еще раз, или же что приложение подвисло. С чем связана такая заторможенность? Как ускорить появление? У меня открытие печати из IDE тоже хорошие секунды (хотя и принтера-то нет), видимо шансов "ускорить" немногоНазвание: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: gil9red от Май 24, 2016, 15:41 Мое дело предложить варианты :)
Хорошая мысль, но как потом этот бар закрыть? При сильном желании можно нативными способами узнать об открытии окна, если оно не подконтрольно программе автора. Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: Racheengel от Май 24, 2016, 17:13 Возможно, эта фигня опрашивает сеть (ищет сетевые принтеры) или что-то в этом роде.
Можно попробовать при старте проги создавать скрытый диалог, а потом при необходимости его показывать. Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: Igors от Май 25, 2016, 09:17 Возможно, эта фигня опрашивает сеть (ищет сетевые принтеры) или что-то в этом роде. Вот когда это "потом"? Ведь главная нитка занята. Можно создать еще нитку и там определить что истекло значительное время - но сделать show нечем (UI только в главной).Можно попробовать при старте проги создавать скрытый диалог, а потом при необходимости его показывать. Думаю приемлемый вариант такой: сразу выскочить с QProgressDialog и закрыть его по событию. Напр QEvent::FocusIn должно приходить для диалога принтера Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: poru от Май 25, 2016, 09:29 Выяснилось, как разъясняет https://bugreports.qt.io/browse/QTBUG-44291 (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) .
Теперь надо показать юзеру, что наша прога не зависла, а лишь слегка задумалась. Идея со скрытым окном не прокатит, за время работы проги, юзер может изменит дефолтный принтер и нам надо по новой его инициализировать. ПрогрессДиалог то же не пойдет, он будет тупо висеть без индикатора. Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: Igors от Май 25, 2016, 11:18 Выяснилось, как разъясняет https://bugreports.qt.io/browse/QTBUG-44291 (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тандартное решение этой проблемы мне неизвестно. Часто рекомендуют "вынос в поток" - но не уверен возможно ли это для диалога принтера. .. ПрогрессДиалог то же не пойдет, он будет тупо висеть без индикатора. Название: Re: Как ускорить появление QPrintPreviewDialog? Отправлено: poru от Май 25, 2016, 15:58 Подобные ситуации часто возникают там и сям - главная нитка занята, и обновить UI некому. Какое-то общее/cтандартное решение этой проблемы мне неизвестно. Часто рекомендуют "вынос в поток" - но не уверен возможно ли это для диалога принтера. Вынесем туда принтер, а диалог будет ждать finished. |