Название: [solved]QGraphicsItem update from thread Отправлено: pethead от Октябрь 27, 2010, 12:50 subj
пытаюсь прикрутить к QGraphicsItem поток чтобы тот вызывал по нужде перерисовку QGraphicsItem, но судя по всему из потока доступ к QGraphicsItem не выйдет. говорят надо как то прикрутить посыл сигнала из потока в главный поток приложения и там уже вызывать отрисовку. но что то не работает посыл сигнала: QGraphicsItem m_Chip MainWindow widget; код потока void Thread::run() { while (!m_stopped) { QColor cc; cc.setRgb(qrand()/(double)RAND_MAX*256,qrand()/(double)RAND_MAX*256,qrand()/(double)RAND_MAX*256,127); m_Chip->color=cc; emit itemRepaint(m_Chip); QTest::qSleep(200); } m_stopped = false; } перед запуском потока QObject::connect(&threadA,SIGNAL(itemRepaint(Chip)),widget,SLOT(updateItem(Chip))); в классе потока signals: void itemRepaint(Chip* chip); в MainWindow public slots: void updateItem(Chip *item); void MainWindow::updateItem(Chip *item) { //сюда не попадает item->update(item->boundingRect()); } ** сделал демку с мультипоточностью и отрсиовкой Qgrapicsitem из потоков с передачей сигналов о перерисовке. кому интересно приложено. Название: Re: QGraphicsItem update from thread Отправлено: Пантер от Октябрь 27, 2010, 13:00 Что в консоль сыпется?
widget - MainWindow *widget - так? Название: Re: QGraphicsItem update from thread Отправлено: AlekseyK от Октябрь 27, 2010, 13:13 Покажи объявление itemRepaint и updateItem? И потом нужно вызывать:
Код
Посмотри примеры examples\threads\mandelbrot\ и examples\network\blockingfortuneclient\ и поймёшь как передавать данные из потока и почему у тебя не передаётся. Название: Re: QGraphicsItem update from thread Отправлено: pethead от Октябрь 27, 2010, 14:23 дописал Qt::QueuedConnection
но работает как то через раз, от компиляции к компиляции. ниче не понимаю... и работает если посылать сигнал с текстом emit Signal_AppendTextThreadB("from B"); а сигнал с указателем не приходит emit Signal_itemRepaint(m_Chip); нашел проблему и с указателем. надо писать так: QObject::connect(&thread,SIGNAL(Signal_itemRepaint(Chip*)), widget,SLOT(Slot_itemRepaint(Chip*)),Qt::QueuedConnection); а я писал QObject::connect(&thread,SIGNAL(Signal_itemRepaint(Chip)), widget,SLOT(Slot_itemRepaint(Chip)),Qt::QueuedConnection); балбес... Название: Re: [solved]QGraphicsItem update from thread Отправлено: AlekseyK от Октябрь 27, 2010, 16:06 Я думаю, что ты правильно сигналы вызывал, только в параметрах itemRepaint и updateItem нужно было указать: (const Chip &).
|