Quantcast
Channel: Linux.org.ru: Форум
Viewing all articles
Browse latest Browse all 108361

Как отловить момент старта exec() в QDialog?

$
0
0

Сделал диалог, унаследованный от QDialog.

Диалог показывает большой набор иконок (несколько разделов по ~1500 иконок). Иконки из одного раздела надо считать с диска, и это занимает около 5 секунд. Поэтому в диалоге предусмотрена процентная линейка, которая показывает процесс загрузки иконок в разделе. И она работает, когда пользователь выбирает тот или иной раздел иконок.

Но возникает проблема с первой отрисовкой диалога. В момент, когда диалог появляется на экране, необходимо загрузить иконки из первого раздела.

И я не пойму, как отловить момент запуска диалога через exec(), чтобы запустить загрузку иконок из первого раздела.

Вопрос: Как отловить момент старта exec() в QDialog?


PS:

Если запускать загрузку иконок (например сделать метод preloadIcon()) до выполнения exec(), то все работает. За исключением того, что весь интерфейс замирает на 5 секунд, и непонятно что происходит.

И даже если если перед preloadIcon() запустить show(), то тоже непонятно что происходит, ибо виджеты окна диалога не отрисовываются, видна только рамка. Это происходит из-за того, что основной цикл диалога не запущен, а запускается он все тем же exec().

И даже если при обновлении процентной линейки вызывать метод диалога update(), то тоже ничего не отрисовывается. Видимо, тоже потому что еще не запущен основной цикл.


PS2:

Переопределение exec() тоже не помогает. Если сделать так:

int myDialog::exec()
{
  preloadIcon();
  QDialog::exec();
}

То загрузки не будет видно, потому что основной цикл еще не запущен.

А если сделать так:
int myDialog::exec()
{
  QDialog::exec();
  preloadIcon();
}

То до preloadIcon() дело не дойдет, ибо будет ожидание завершения QDialog::exec().

 ,


Viewing all articles
Browse latest Browse all 108361

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>