Russian Qt Forum

Qt => Общие вопросы => Тема начата: sja от Январь 24, 2008, 22:51



Название: падает прога...
Отправлено: sja от Январь 24, 2008, 22:51
qt4, linux.

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

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

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


Название: Re: падает прога...
Отправлено: pastor от Январь 24, 2008, 23:11
Вы напрямую обращаетесь к виджетам из другого потока? Покажите код, чтобы не гадать


Название: Re: падает прога...
Отправлено: sja от Январь 24, 2008, 23:52
Да,напрямую.

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

я понимаю, что это неверно,а как сделать корректно?


Название: Re: падает прога...
Отправлено: pastor от Январь 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


Название: Re: падает прога...
Отправлено: sja от Январь 25, 2008, 10:06
какой слот виджета можно задействовать для выставления новой палитры, если такого слота нет, а слот setLabel есть?
как из потока сгенерировать событие, если только у QApplication есть sendEvent?
может быть в гуевом классе создать слот, который будет напрямую обращаться к своему лабелю для выставления палитры и вызывать из моего потока сигналом?...


Название: Re: падает прога...
Отправлено: Mikhail от Январь 25, 2008, 12:14
какой слот виджета можно задействовать для выставления новой палитры, если такого слота нет, а слот setLabel есть?
как из потока сгенерировать событие, если только у QApplication есть sendEvent?
может быть в гуевом классе создать слот, который будет напрямую обращаться к своему лабелю для выставления палитры и вызывать из моего потока сигналом?...

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

TargetWidget принимает сигнал в TargetWidget::customEvent(QEvent *event), в котором можно проводить всю необходимую обработку