Russian Qt Forum
Май 06, 2024, 05:28
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Как ускорить появление QPrintPreviewDialog?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как ускорить появление QPrintPreviewDialog? (Прочитано 4926 раз)
poru
Самовар
Offline
Сообщений: 103
Как ускорить появление QPrintPreviewDialog?
«
:
Май 24, 2016, 14:12 »
Qt5.6 Win7 У меня время появления диалога ~ 4-5 сек. Порой кажется что на кнопку печати не нажал и нажимаю еще раз, или же что приложение подвисло. С чем связана такая заторможенность? Как ускорить появление?
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #1 :
Май 24, 2016, 14:43 »
Может показывать какой нибудь прогресс-бар, пока окно не появилось?
Ну или, лезть в внутренности и смотреть что вызывается из нативного и замерять время выполнения
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #2 :
Май 24, 2016, 15:29 »
Цитата: gil9red от Май 24, 2016, 14:43
Ну или, лезть в внутренности и смотреть что вызывается из нативного и замерять время выполнения
Ну допустим нашли какой-то нативный вызов который тормозит - и что с того?
Цитата: gil9red от Май 24, 2016, 14:43
Может показывать какой нибудь прогресс-бар, пока окно не появилось?
Хорошая мысль, но как потом этот бар закрыть?
Цитата: poru от Май 24, 2016, 14:12
Qt5.6 Win7 У меня время появления диалога ~ 4-5 сек. Порой кажется что на кнопку печати не нажал и нажимаю еще раз, или же что приложение подвисло. С чем связана такая заторможенность? Как ускорить появление?
У меня открытие печати из IDE тоже хорошие секунды (хотя и принтера-то нет), видимо шансов "ускорить" немного
«
Последнее редактирование: Май 24, 2016, 16:38 от Igors
»
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #3 :
Май 24, 2016, 15:41 »
Мое дело предложить варианты
Цитата: Igors от Май 24, 2016, 15:29
Хорошая мысль, но как потом этот бар закрыть?
При сильном желании можно нативными способами узнать об открытии окна, если оно не подконтрольно программе автора.
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #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
Сообщений: 11445
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #5 :
Май 25, 2016, 09:17 »
Цитата: Racheengel от Май 24, 2016, 17:13
Возможно, эта фигня опрашивает сеть (ищет сетевые принтеры) или что-то в этом роде.
Можно попробовать при старте проги создавать скрытый диалог, а потом при необходимости его показывать.
Вот когда это "потом"? Ведь главная нитка занята. Можно создать еще нитку и там определить что истекло значительное время - но сделать show нечем (UI только в главной).
Думаю приемлемый вариант такой: сразу выскочить с QProgressDialog и закрыть его по событию. Напр QEvent::FocusIn должно приходить для диалога принтера
Записан
poru
Самовар
Offline
Сообщений: 103
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #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
Сообщений: 11445
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #7 :
Май 25, 2016, 11:18 »
Цитата: poru от Май 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) .
Багаж бесполезных знаний успешно пополнен
Цитата: poru от Май 25, 2016, 09:29
Идея со скрытым окном не прокатит ..
..
ПрогрессДиалог то же не пойдет, он будет тупо висеть без индикатора.
Вы резво отвергаете вполне разумные советы - но найдется ли у Вас что-то лучшее? Подобные ситуации часто возникают там и сям - главная нитка занята, и обновить UI некому. Какое-то общее/cтандартное решение этой проблемы мне неизвестно. Часто рекомендуют "вынос в поток" - но не уверен возможно ли это для диалога принтера.
Записан
poru
Самовар
Offline
Сообщений: 103
Re: Как ускорить появление QPrintPreviewDialog?
«
Ответ #8 :
Май 25, 2016, 15:58 »
Цитата: Igors от Май 25, 2016, 11:18
Подобные ситуации часто возникают там и сям - главная нитка занята, и обновить UI некому. Какое-то общее/cтандартное решение этой проблемы мне неизвестно. Часто рекомендуют "вынос в поток" - но не уверен возможно ли это для диалога принтера.
Вынесем туда принтер, а диалог будет ждать finished.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...