Название: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 09, 2011, 12:32 Здравствуйте.
Создание QFileDialog приводит к "замерзанию" интерфейса более чем на 5-7 секунд! Обратите внимание - просто создание, без открытия - динамическое [QFileDialog *fd = new QFileDialog(m_scheme)] или на стеке - без разницы. При этом вызов статической функции QFileDialog::getOpenFileName - летает просто. Что за ерунда - кто-нибудь пояснит? Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Пантер от Март 09, 2011, 12:40 QFileDialog::getOpenFileName по умолчанию вызывает нативный вариант, возможно, дело в этом.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 09, 2011, 14:20 ну да... я посмотрел в коде.
но 5-7 секунд на не самой медленной машинке - это же уму непостижимо! а ведь хочется использовать и сигналы и все вкусности объекта, а не просто статические методы... Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: SASA от Март 09, 2011, 14:55 Это факт, что Qt диалоги работают медленнее.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 09, 2011, 15:06 увы.... не просто медленнее. пипец, как медленно )))))
я глянул - они в своем же коде практически из не используют, все обходятся статическими вызовами. Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Пантер от Март 09, 2011, 15:15 Попробуй поковыряться в коде QFileDialog и понять откуда ноги растут.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 09, 2011, 15:36 по коду вроде как неоткуда. трейсинг вечело проходит все методы конструктора, вот только после этого весь интерфейс рпограммы умирает на несколько секунд
Визуально это выглядит так. Код QMessageBox отображает свои контуры, но и только. последующая отрисовка и реакция на мышь и клаву замерзает на вечность. PS. Вот еще наблюдение. ПРоблема не в создании диалога как такового. Создание с последующим мгновенным убитием не вызывает тормозов Код Значит, скорее всего, диалог где-то цепляет на себя очередь оконных сообщений, даже не отобржаясь на экране, и не отдает ни в какую... PPS. Хмм... А вот если сделать так Код то окно тоже шустренько выводится на экран, и прорисовывается все как надо, только вот нету никакой реакции на мышку - мышь двигается но не может ничего выделить в окошке диалога. ... Чистио теоретически, объект передает управление дальше, однако где-то полностью захватывает очередь оконных сообщений, что-то делает и потом отпускает ее. Это жутко как неудобно искать (((( Отложим до лучших времен ) Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: ufna от Март 09, 2011, 16:34 насколько помню, это так всегда было ) там по-моему файловая модель тормозит.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Disaron от Март 09, 2011, 22:05 У меня оно зачем-то к флопповоду обращается, и пока не получит отклик что там ничего нету - диалог не показывает.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Пантер от Март 09, 2011, 22:08 Это нормально - модель делает запрос на получение иконки флоповода, который сначала проверяет наличие вставленного диска. Винда, однако.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 10, 2011, 07:28 не-не, ребята, явно ни файловая модель, ни иконка флопа тут ни при чем.
по модели: тогда бы зависание было внутри конструктора, при построении ее, а конструктор пролетает на ура, тормозит только последующее построение любого окна, даже простого QMessageBox. по флопарю: не жужжит флопарь, нету к нему обращения. Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Пантер от Март 10, 2011, 08:17 Как раз не в конструкторе, а при заполнение модели, которое происходит в потоке.
Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: GreatSnake от Март 10, 2011, 08:37 Цитировать тормозит только последующее построение любого окна, даже простого QMessageBox. Модель заполняется по таймеру, который отрабатывет в первом обработчике событий, который и запускается в QMessageBox::information().Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 10, 2011, 08:40 Как раз не в конструкторе, а при заполнение модели, которое происходит в потоке. Как раз не в конструкторе, а при заполнение модели, которое происходит в потоке. Дак тем более, это же поток отдельный, да еще без вывода на экран, откуда тормоза??? Тормоза именно при выводе на экран любого типа окна, как я писал выше. ПРичем, забавно:
Вот кстати, смешной примерчик: Код После конструирования диалога сразу отрисовываю итем на сцене - снова без тормозов. Явно что-то типа эксклюзивного захвата очереди оконных сообщений, ИМХО. Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 10, 2011, 08:43 Цитировать тормозит только последующее построение любого окна, даже простого QMessageBox. Модель заполняется по таймеру, который отрабатывет в первом обработчике событий, который и запускается в QMessageBox::information().Что-что :o ?? А причем тут обработчик совершенно другого окна? Которому до звезды чужая файловая модель?? Это как так? Кроме того - в модели, на моем уровне: всего 2 каталога. или заполняется вся модель вселенной моего компьютера? Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: GreatSnake от Март 10, 2011, 08:57 Цитировать А причем тут обработчик совершенно другого окна? Которому до звезды чужая файловая модель?? Вот как раз, что ему "до звезды" он и обрабатывает очередь событий.Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 10, 2011, 09:13 Цитировать А причем тут обработчик совершенно другого окна? Которому до звезды чужая файловая модель?? Вот как раз, что ему "до звезды" он и обрабатывает очередь событий.все-таки не ясно мне. в таком случае все последующие окна должны замерзать. Однако я провел эксперимент: после QFileDialog fd; резко метнулся на кнопку "ОТкрыть" и вызвал диалог выбора файлов. Все чики-пуки, быстро и адекватно. ------------ Резюмяшка Интернет как русскоязычный так и англоязычный полон сетованиями по этому поводу, судя по всему - это та самая проруха, на в-общем-то неплохую Qt-"старуху" ))). Этот кусок кода явно доверили не тому человеку ). Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Авварон от Март 10, 2011, 12:13 Вы когда опен делаете не делайте его от мукомпутора и все будет работать
В винапи реально есть косяк с получением инфо от флоппи дисков (даже если их в системе нет(!!!)), который не лечится _вообще_ никак (ф-ия GetVolumeInformaion и иже с ней возвращают эррор код NotReady с бешеной задержкой). Я на это много времени потратил, решения не нашел. Баг есть в c# также если пощупать класс VolumeInfo (DriveInfo?). Единственный воркэраунд - вырезать диски A: и B: и не обращаться к ним. Но файлмодели кьюта это не умеют. Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 10, 2011, 12:21 Вы когда опен делаете не делайте его от мукомпутора и все будет работать В винапи реально есть косяк с получением инфо от флоппи дисков (даже если их в системе нет(!!!)), который не лечится _вообще_ никак (ф-ия GetVolumeInformaion и иже с ней возвращают эррор код NotReady с бешеной задержкой). Я на это много времени потратил, решения не нашел. Баг есть в c# также если пощупать класс VolumeInfo (DriveInfo?). Единственный воркэраунд - вырезать диски A: и B: и не обращаться к ним. Но файлмодели кьюта это не умеют. У меня даже до опена не доходит )) Я, если Вы заметили по моим постам, даже до этого не дохожу. Тем не менее, попробовал вот так Код Все равно QMessageBox умирает на 5 секунд. Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: Авварон от Март 10, 2011, 12:24 воткните дебаги а еще лучше профилировку QTime'ом на каждую строку.
и передавайте директорию в конструктор диалога Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: frostyland от Март 10, 2011, 12:34 воткните дебаги а еще лучше профилировку QTime'ом на каждую строку. и передавайте директорию в конструктор диалога Директория в конструкторе не приводит ни к чему. QTime - непонятно куда его втыкать - главный поток то проходит нормально, тормоза при выводе левого окошка, а главное - для этого надо корежить исходники Qt - и перекомпилировать. У меня почему-то библиотека не перекомпилируется - вылезают ошибки всякие - часу на втором компиляции. Мрачно все это [БУУУУУЭЭЭЭЭЭЭЭЭЭ]. А дебаг не отлавливает, пока я прохожу по строкам, проходит больше 5 секунд и все красиво выстраивается. Ладно, забил я на это. Сами Qt-шники положили на свой кривой класс как в коде, так и в семплах. ;D Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: silart от Апрель 19, 2012, 08:11 Что интересно, если в "Моем компьютере" нет флоповода, то все работает хорошо, без тормозов. А если он есть, то начинаются жуткие тормоза секунд на 7 при создании диалога.
Кому-нибудь удалось побороть эти глюки или как-то их обойти? Чем мне не нравятся нативные виндовые диалоги, так это тем, что они создаются почему-то не в середине окна, а где-то сбоку. Может как-то можно заставить их создаваться посередине? Название: Re: Что за жуткие тормоза при создании QFileDialog? Отправлено: GreatSnake от Апрель 19, 2012, 10:08 Может как-то можно заставить их создаваться посередине? Средствами Qt не получится. |