2011-09-26 4 views
0

나는 자식 스레드의 데이터가 추가되어야하는 테이블 위젯을 가지고 있습니다.Qt4 child thread 편집 gui on mainthread

이 오류가 발생합니다 GUI 스레드 외부에서 픽스맵을 사용하는 것은 안전하지 않습니다. C#에서는 Disptacher를 사용하여 mainThread에 gui 객체에 데이터를 추가하도록 지시합니다.

여기에 뭔가 가깝다고 생각 하나? 오전 사용 qt4.7 부모 개체에있는 슬롯 및 스레드 개체 내에서 신호를 .. 부모 스레드 슬롯에 신호를 보내려면 자식 스레드에서 신호를 내 보냈습니다. 신호는 발사되지 않습니다. 내가 object-> run()과 같은 메소드를 실행할 때; (즉, mainthread에서) 잘 작동합니다.하지만 스레드 객체 -> start(); 난 그냥 문제의 근본에 도착 27/09 .. 신호 및 슬롯 작업 - 신호가

UPDATE

.. 내가하지 mainthread의 스레드 somework을 할 neeed ... 발사되지 하지만 자식 스레드는이 모든 문제를 일으키는 qnetworkaccessmanger 개체를 lauching입니다 .. 나는 networkaccess 개체 및 아무런 오류도 언급하지 않았다. 네트워크 요청을 호출하는 스레드가 필요하고 .. GUI의 결과를 업데이 트 ..

답변

2

가장 쉬운 방법은 Qt's signal/slot mechanism의 연결 유형을 Qt::QueuedConnection으로 설정하는 것입니다. 이렇게하면 수신자 객체가 자동으로 스레드에있는 슬롯에 호출이 대기합니다.

+0

또한 .. 데이터를 추가 할 스레드가 아니라 많은 스레드가 있습니다. 그래서 부모의 슬롯을 만들었고 스레드의 신호를 방출했습니다. 부모 클래스의 포인터를 스레드 클래스로 옮겨 보았습니다.하지만 .. 말하지 않습니다. QObject : 다른 스레드에있는 부모에 대해 자식을 만들 수 없습니다. –

+0

오 .. 뭐가 바뀌고 ... 나는 자식에서 부모 참조가 필요 없다는 것을 깨달았다. –

+0

부모 개체에서 스레드를 만들고 스레드 개체 내에서 신호를 생성했다. 자식 스레드의 신호를 방출한다. 부모의 슬롯에 신호를 보냅니다.이 방법도 효과가 없습니다. "GUI 스레드 외부에서 픽스맵을 사용하는 것이 안전하지 않습니다"라는 동일한 오류가 발생합니다. 내가 object-> run() 할 때; object-> start();를 말하지 않고; 그것은 주 스레드에서 잘 실행됩니다. 그러나 object-> start(); lauches error .. –