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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: падает прога...  (Прочитано 3994 раз)
sja
Гость
« : Январь 24, 2008, 22:51 »

qt4, linux.

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

значения label  яменяю через сигнал setLabel, а как выставлять у него и groupBoxалитру?
если я просто вызываю groupBox->setPalette программа иногда (именно иногда - я не могу понять в какой момент!!!)

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Январь 24, 2008, 23:11 »

Вы напрямую обращаетесь к виджетам из другого потока? Покажите код, чтобы не гадать
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
sja
Гость
« Ответ #2 : Январь 24, 2008, 23:52 »

Да,напрямую.

 label & groupbox находятся в другом потоке, в главном.
     label->setPalette(Palette);
     groupBox->setPalette(Palette);

я понимаю, что это неверно,а как сделать корректно?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Январь 25, 2008, 00:26 »

Так делать нельзя!

1) Можно использовать сигналы\слоты
2) Можно использовать эвенты

Поиск по форуму рулит:

http://prog.org.ru/forum/index.php/topic,6203.0.html
http://prog.org.ru/forum/index.php/topic,6598.0.html
http://prog.org.ru/forum/index.php/topic,6667.0.html
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
sja
Гость
« Ответ #4 : Январь 25, 2008, 10:06 »

какой слот виджета можно задействовать для выставления новой палитры, если такого слота нет, а слот setLabel есть?
как из потока сгенерировать событие, если только у QApplication есть sendEvent?
может быть в гуевом классе создать слот, который будет напрямую обращаться к своему лабелю для выставления палитры и вызывать из моего потока сигналом?...
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Январь 25, 2008, 12:14 »

какой слот виджета можно задействовать для выставления новой палитры, если такого слота нет, а слот setLabel есть?
как из потока сгенерировать событие, если только у QApplication есть sendEvent?
может быть в гуевом классе создать слот, который будет напрямую обращаться к своему лабелю для выставления палитры и вызывать из моего потока сигналом?...

В потоке формируешь event, а затем:
QApplication::postEvent(TargetWidget, event);

TargetWidget принимает сигнал в TargetWidget::customEvent(QEvent *event), в котором можно проводить всю необходимую обработку
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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