Название: форма диалога рисуется с задержкой Отправлено: boriss от Октябрь 27, 2011, 10:06 Добрый день!!
А не поможете вот с таким вопросом ... при вызове формы QDialog, форма рисуется с задержкой в несколько секунд, прям заметно на экране. Что это может быть? Название: Re: форма диалога рисуется с задержкой Отправлено: Bepec от Октябрь 27, 2011, 10:11 Код в студию. описание работы краткое в студию. И чего ты хочешь добиться от программы в студию.
А там и подтянутся тролли и прочая формуная живность. PS может тормозить изза: - комп слабый - просто тормозной - что то ты неправильно делаешь* - что то его тормозит - мб он вообще не тормозит и тебе кажется? :D Название: Re: форма диалога рисуется с задержкой Отправлено: GreatSnake от Октябрь 27, 2011, 10:21 Цитировать ... в студию ... в студию ... в студию. Прям Поле Чудес... )Название: Re: форма диалога рисуется с задержкой Отправлено: kambala от Октябрь 27, 2011, 10:34 наверное в конструкторе диалога разные страшные действия совершаются
Название: Re: форма диалога рисуется с задержкой Отправлено: boriss от Октябрь 27, 2011, 10:51 приложение работает с БД. На форме 3 вьюхи с QsqlQueryModel. И вот когда вьюхи пустые все нормально работает, а когда с данными то немного с задержкой диалог открывается. Возможно это действительно нормально, но как-то непривычно
наверное в конструкторе диалога разные страшные действия совершаются Обычное сообщение тоже с небольшой задержкой отображается, получается от диалога от моего это не зависитНазвание: Re: форма диалога рисуется с задержкой Отправлено: boriss от Октябрь 27, 2011, 12:09 такое ощущение что сначала рисуется пустой диалог, безо всяких виджетов, а потом уже с виджетами все как-надо
Название: Re: форма диалога рисуется с задержкой Отправлено: Bepec от Октябрь 27, 2011, 12:12 Проблема: задержка диалога
Я так представляю, у Вас в конструкторе происходит наполнение моделей данными из SQL. Решение: конструктор очистить от лишнего, загрузку данных перенести в отдельную функцию (в идеале поток), поставить пользователю индикатор загрузки данных из баз/базы. Проблема: слишком частое обновление баз, или же нечастое(раз в секунду) полное их обновление. И мысль еще - вы обновление делаете насколько часто? Обновление раз в 20 мс тормозит программу не по детски, если производится полное обновление. Решение: beginResetModel()/endResetModel() - обновление после "полного получения данных", а не пирамидально (пирамидально - это добавление 1 строки и автоматическое обновление предыдущих). И код, код желательно. Мы ему плохо не сделаем, я его даже с ложечки покормлю. Название: Re: форма диалога рисуется с задержкой Отправлено: boriss от Октябрь 27, 2011, 13:01 Код
вот часть кода. Сдесь при нажатии кнопки на основной форме просто выдается сообщение ... Вот оно выдается с небольшой задержкой. Если в основном компьютере не заполнять модели данными, то сообщение выводится значительно быстрее Название: Re: форма диалога рисуется с задержкой Отправлено: Bepec от Октябрь 27, 2011, 13:04 Код: #include <QMessageBox> // убиваем эти строки, выделенные красным (выносим в отдельную функцию) // ------- Отображаем Группы МУ GroupMUModel = new QSqlQueryModel(this); GroupMUModel->setQuery("SELECT MUGroupCode, MUGroupName , MUGroupId " "FROM sprMUGroup " "ORDER BY 1"); if(GroupMUModel -> lastError().isValid()){ QMessageBox::critical(this,tr("Ошибка SQL"),GroupMUModel -> lastError().text()); return; } ui->GroupMUView -> setModel(GroupMUModel); // ------- Отображаем Подгруппы МУ UnGroupMUModel = new QSqlQueryModel(this); UnGroupMUModel -> setQuery("SELECT * " "FROM sprMUUnGroup "); if(UnGroupMUModel -> lastError().isValid()){ QMessageBox::critical(this,tr("Ошибка SQL"),UnGroupMUModel -> lastError().text()); return; } ui->UnGroupMUView -> setModel(UnGroupMUModel); // ------- Отображаем мед. услуги MUModel = new QSqlQueryModel(this); MUModel -> setQuery("SELECT * FROM sprMU "); if(MUModel -> lastError().isValid()){ QMessageBox::critical(this,tr("Ошибка SQL"),MUModel -> lastError().text()); return; } ui->MUView -> setModel(MUModel); Код: } Соответственно пункт 1 моих и прочих предположений был верен. PS извиняюсь перед господами, но в /code цветом не выделяется :( Название: Re: форма диалога рисуется с задержкой Отправлено: boriss от Октябрь 27, 2011, 13:27 Верес, я может чего-то не понимаю ...
Убиваем выделенное красным или выносим в отдельную функцию, вызываемую после загрузки формы (или в отдельном потоке). Мне надо чтобы данные на форме заполнялись сразу при открытии основной формы ... А доп. форму, или в данном случае сообщение, я вывожу по клику на кнопке уже основной формы. Вот эта доп. форма, а в данном случае сообщение, выводится с небольшой задержкой. Название: Re: форма диалога рисуется с задержкой Отправлено: Bepec от Октябрь 27, 2011, 13:37 Уважаемый Борис.
Давайте я вам объясню что вы делаете: Форма загружается, прорисовывается и ... ждет когда окончатся функции, описанные в конструкторе. У вас в данном случае запрос к БД, который кстати может быть и более длительным(до 10-15 секунд), в зависимости от расположения базы, ее величины и величины канала связи. Это плохо! Очень плохо. Мой вариант (мб и не очень простой): Код: Ваш_Класс::Конструктор В самом же потоке вы вызываете все свои запросы, и передаете данные в основной поток (при этом интерфейс не виснет, пользователь видит программу с пустыми полями). Получаете данные из потока, устанавливаете в View, показывая их пользователю. Пользователю так же можно вывести что-то типа "Запрос к базам данных выполняется бззз...". Дополнительная форма у вас я думаю работает аналогично ( в конструктор Вы все запихали). Потому и метод решения тот же. PS по опыту знаю, лучше пользователь видит пустые поля с сообщением о загрузке сразу, чем видит тормоза при загрузке и думает, что тормозит ВАША программа, а не БД. Название: Re: форма диалога рисуется с задержкой Отправлено: boriss от Октябрь 27, 2011, 13:42 Спасибо большое за разъяснения. Будем пробовать :)
|