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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Что за жуткие тормоза при создании QFileDialog?  (Прочитано 10553 раз)
frostyland
Гость
« : Март 09, 2011, 12:32 »

Здравствуйте.

Создание QFileDialog приводит к "замерзанию" интерфейса более чем на 5-7 секунд!
Обратите внимание - просто создание, без открытия - динамическое [QFileDialog *fd = new QFileDialog(m_scheme)]
или на стеке - без разницы.
При этом вызов статической функции QFileDialog::getOpenFileName - летает просто.

Что за ерунда - кто-нибудь пояснит?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 09, 2011, 12:40 »

QFileDialog::getOpenFileName по умолчанию вызывает нативный вариант, возможно, дело в этом.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
frostyland
Гость
« Ответ #2 : Март 09, 2011, 14:20 »

ну да... я посмотрел в коде.
но 5-7 секунд на не самой медленной машинке - это же уму непостижимо!
а ведь хочется использовать и сигналы и все вкусности объекта, а не просто статические методы...
Записан
SASA
Гость
« Ответ #3 : Март 09, 2011, 14:55 »

Это факт, что Qt диалоги работают медленнее.
Записан
frostyland
Гость
« Ответ #4 : Март 09, 2011, 15:06 »

увы.... не просто медленнее. пипец, как медленно )))))
я глянул - они в своем же коде практически из не используют, все обходятся статическими вызовами.

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Март 09, 2011, 15:15 »

Попробуй поковыряться в коде QFileDialog и понять откуда ноги растут.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
frostyland
Гость
« Ответ #6 : Март 09, 2011, 15:36 »

по коду вроде как неоткуда. трейсинг вечело проходит все методы конструктора, вот только после этого весь интерфейс рпограммы умирает на несколько секунд
Визуально это выглядит так.
Код
C++ (Qt)
 
QFileDialog fd;
QMessageBox::information(0, "", "");
 
QMessageBox отображает свои контуры, но и только. последующая отрисовка и реакция на мышь и клаву замерзает на вечность.



PS.
Вот еще наблюдение. ПРоблема не в создании диалога как такового.
Создание с последующим мгновенным убитием не вызывает тормозов
Код
C++ (Qt)
 
{
QFileDialog fd;
}
QMessageBox::information(0, "", "");
 
Значит, скорее всего, диалог где-то цепляет на себя очередь оконных сообщений, даже не отобржаясь на экране, и не отдает ни в какую...



PPS.

Хмм... А вот если сделать так
Код
C++ (Qt)
QFileDialog fd;
QFileDialog fd::getOpenFileName(...)
 
то окно тоже шустренько выводится на экран, и прорисовывается все как надо, только вот нету никакой реакции на мышку - мышь двигается но не может ничего выделить в окошке диалога.

... Чистио теоретически, объект передает управление дальше, однако где-то полностью захватывает очередь оконных сообщений, что-то делает и потом отпускает ее.
Это жутко как неудобно искать ((((
Отложим до лучших времен )
« Последнее редактирование: Март 09, 2011, 16:25 от frostyland » Записан
ufna
Гость
« Ответ #7 : Март 09, 2011, 16:34 »

насколько помню, это так всегда было ) там по-моему файловая модель тормозит.
Записан
Disaron
Гость
« Ответ #8 : Март 09, 2011, 22:05 »

У меня оно зачем-то к флопповоду обращается, и пока не получит отклик что там ничего нету - диалог не показывает.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Март 09, 2011, 22:08 »

Это нормально - модель делает запрос на получение иконки флоповода, который сначала проверяет наличие вставленного диска. Винда, однако.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
frostyland
Гость
« Ответ #10 : Март 10, 2011, 07:28 »

не-не, ребята, явно ни файловая модель, ни иконка флопа тут ни при чем.
по модели: тогда бы зависание было внутри конструктора, при построении ее, а конструктор пролетает на ура, тормозит только последующее построение любого окна, даже простого QMessageBox.
по флопарю: не жужжит флопарь, нету к нему обращения.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Март 10, 2011, 08:17 »

Как раз не в конструкторе, а при заполнение модели, которое происходит в потоке.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Март 10, 2011, 08:37 »

Цитировать
тормозит только последующее построение любого окна, даже простого QMessageBox.
Модель заполняется по таймеру, который отрабатывет в первом обработчике событий, который и запускается в QMessageBox::information().
Записан

Qt 5.11/4.8.7 (X11/Win)
frostyland
Гость
« Ответ #13 : Март 10, 2011, 08:40 »

Как раз не в конструкторе, а при заполнение модели, которое происходит в потоке.

Как раз не в конструкторе, а при заполнение модели, которое происходит в потоке.
Дак тем более, это же поток отдельный, да еще без вывода на экран, откуда тормоза???
Тормоза именно при выводе на экран любого типа окна, как я писал выше.
ПРичем, забавно:
  • при выводе своего окна диалога отрисовывается сразу все, в том числе и файловая модель (2 каталога )))), но мышка тупит и не выделяет итемы
  • при выводе QMessageBox трисовывается только рамка окна и все замерзает
Не, ерунда какая-то, дело явно не в модели как таковой. Где-то лажа в реализации...
Вот кстати, смешной примерчик:
Код
C++ (Qt)
QFileDialog fd;
qDebug("1");
qDebug("2");
qDebug("3");
qDebug("4");
m_scheme->m_scene->addEllipse(10, 10, 40, 50);
 
После конструирования диалога сразу отрисовываю итем на сцене - снова без тормозов.
Явно что-то типа эксклюзивного захвата очереди оконных сообщений, ИМХО.
Записан
frostyland
Гость
« Ответ #14 : Март 10, 2011, 08:43 »

Цитировать
тормозит только последующее построение любого окна, даже простого QMessageBox.
Модель заполняется по таймеру, который отрабатывет в первом обработчике событий, который и запускается в QMessageBox::information().

Что-что Шокированный ?? А причем тут обработчик совершенно другого окна? Которому до звезды чужая файловая модель??
Это как так?
Кроме того - в модели, на моем уровне: всего 2 каталога. или заполняется вся модель вселенной моего компьютера?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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