Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ а обработка событий виджетов однопоточна?

Автор: kuler 24.10.2008, 14:05

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

примерный код

new qwidget
show

dataprocess

delete widget

врубил в виджете таймер, а он тоже не срабатывает (вот это вообще нонсенс)

Автор: sploid 24.10.2008, 15:11

в цикле обработки данных вызывай:
void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags, int maxtime ) [static]

а то что нет таймера так и должно быть, ты же не обрабатываешь сообщения.

Автор: Litkevich Yuriy 24.10.2008, 15:32

kuler, обработка GUI событий происходит в главном потоке. Из псевдо кода не понятно как ты собирался управлять индикатором выполнения.

в длительных циклах всегда надо вставлять такие вещи как показал sploid

Автор: kuler 24.10.2008, 15:43

sploid,
как это не обрабатываю? обработчик таймера есть и он начинает срабатывать сразу после тормоза
Litkevich Yuriy,
там нет цикла, а есть вызов одного метода который тормозит

вообще то да, в билдере тоже не срабатывает пока не завершится тормоз

__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  /*B* b = new B;
  IB* ib = (IB*)b;
  b->met1();*/
  t->Enabled = true;

}
//---------------------------------------------------------------------------
не сработает в следующий раз пока не завершится а()
void __fastcall TForm1::tTimer(TObject *Sender)
{
a();
}
//---------------------------------------------------------------------------
void a()
{
        int c = 1;
  for (int i = 0; i < 2000; i++)
  for (int j = 0; j < 1000000; j++)
    c++;
}

Автор: Litkevich Yuriy 24.10.2008, 15:59

Цитата(kuler @ 24.10.2008, 19:43) *
там нет цикла, а есть вызов одного метода который тормозит
посути одно и тоже, длительный процесс.

Я на эту грблю не разу не наступал, т.к. прочитал про нее в книжке немногим раньше, чем начал маломальски сложные программы на Дельфи-3 писать, а книжка была очень хорошая, правда забыл как называлась, помню, что про Дельфи-2

Автор: kuler 24.10.2008, 16:33

Цитата(Litkevich Yuriy @ 24.10.2008, 16:59) *
Цитата(kuler @ 24.10.2008, 19:43) *
там нет цикла, а есть вызов одного метода который тормозит
посути одно и тоже, длительный процесс.

Я на эту грблю не разу не наступал, т.к. прочитал про нее в книжке немногим раньше, чем начал маломальски сложные программы на Дельфи-3 писать, а книжка была очень хорошая, правда забыл как называлась, помню, что про Дельфи-2

имхо, правильней сказать что не сталкивались, ибо этот метод не мной написан, а вызывать нада, да и не должно быть в нормальном методе всякого лишнего мусора типа updatecomponent (во всяком случае в случае если неизвестно сколько будет длиться процесс)

Автор: sploid 24.10.2008, 21:23

kuler что бы гуйня не тормозила, "длинные" методы вызываются в отдельном потоке.

Автор: kuler 27.10.2008, 10:42

Цитата(sploid @ 24.10.2008, 22:23) *
"длинные" методы вызываются в отдельном потоке

в курсе, но это геморройно

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)