crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QThread: изменение элементов QDialog, Красивое решение.
canavar
  опции профиля:
сообщение 29.3.2009, 17:40
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 26.3.2009
Пользователь №: 643

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем доброго вечера.

Есть такая проблема: Существует окно QDialog. При загрузке этого окна происходят довольно тяжелые вычисления и, как следствие, окно замораживается. Элементов на форме 6 штук ( два QTableWidget, четыре QListWidget). Хотелось бы вынести все вычисления в отдельный поток.

Но я не понимаю, как сделать так, чтобы второй поток смог изменять Widget'ы на форме QDialog. Можно конечно в поток передавать указатели на Widget'ы, но у меня есть подозрение, что существует более красивое решение...

Что вы можете сказать по этому поводу?

Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
canavar
  опции профиля:
сообщение 29.3.2009, 17:53
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 26.3.2009
Пользователь №: 643

Спасибо сказали: 0 раз(а)




Репутация:   0  


Под красивым решением имеется ввиду... кхм... не описать, нужно прочувствовать. ;)

Да, согласен, так скорее всего и сделаю -- передам указатель на главный объект. )

Тогда вопросик в догонку... Тут начал переносить вычисления в отдельный поток.. Переопределил customEvent(), чтобы поток ловил event'ы. Переопределил run(). запихнул туда все вычисления. В конце метода run() написал exec(), чтобы thread не завершался и ждал event'ы. Но после того, как вычисления завершаются, программа вылетает с exception... Не могу понять в чем проблема. Если exec убрать, то все нормально, но поток завершается и не ловит event'ы.

Нет никаких мыслей по этому поводу?

P.S. Скоро код выложу, чтобы понятнее было..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- canavar   QThread: изменение элементов QDialog   29.3.2009, 17:40
- - ViGOur   Цитата(canavar @ 29.3.2009, 18:40) Но я н...   29.3.2009, 17:46
- - Litkevich Yuriy   А ещё лучше использовать сигналы и слоты.   29.3.2009, 17:48
- - canavar   Под красивым решением имеется ввиду... кхм... не о...   29.3.2009, 17:53
- - Litkevich Yuriy   Цитата(canavar @ 29.3.2009, 21:53) Нет ни...   29.3.2009, 17:57
- - canavar   Что-то типа: while(!stopped) { } Есл...   29.3.2009, 18:00
- - igor_bogomolov   Цитата(canavar @ 29.3.2009, 18:40) Но я н...   29.3.2009, 18:11
- - ViGOur   Цитата(igor_bogomolov @ 29.3.2009, 19:11)...   29.3.2009, 19:46
- - igor_bogomolov   ИМХО. Я так понимаю, что это от реализации програ...   29.3.2009, 20:03
- - canavar   Спасибо за ответы. Так можно узнать почему, если...   29.3.2009, 20:07
- - ViGOur   Цитата(igor_bogomolov @ 29.3.2009, 21:03)...   29.3.2009, 20:19
- - canavar   ManageThread.h/* * ManageThread.h * * Created ...   29.3.2009, 20:36
|- - trdm   Цитата(canavar @ 29.3.2009, 21:36) Manage...   29.3.2009, 21:39
- - canavar   Хорошо.   29.3.2009, 22:13
- - igor_bogomolov   2 canavar Внимательние читайте предыдущие сообщен...   30.3.2009, 1:55
- - _canavar   Огромное спасибо! Теперь стало понятно.   30.3.2009, 13:43


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 11:37