2012-10-24 2 views
0

위젯을 비동기식으로 만든 다음 주 스레드 대화 상자에 위젯을 할당하고 싶습니다. 위젯을 만드는 함수가 있습니다.Qt - 위젯을 비동기식으로 작성하는 방법?

이 함수를 동 기적으로 호출하면 모든 것이 예상대로 작동합니다.

auto futureWidget = QtConcurrent::run(createWidget); 

내가 QFutureWatcher::finished() 신호를 사용하여 위젯 생성이 완료되면, I 메인/GUI 스레드에서 대화에 그 위젯을 추가하려고 : 나는 비동기 적으로이 함수를 호출 할 때 문제입니다.

테이블에 항목을 추가 할 때 SIGSEG가 충돌하는 경우가 있습니다. 가끔 완료되면 생성 된 위젯이 표시되지 않습니다. 또한 GUI 스레드 외부에서 pixmap을 사용하는 것에 대한 표준 출력에 대한 많은 경고가 있습니다.

Qt의 다른 스레드에서 위젯을 만들 수 있습니까? 가능하다면 어떻게 할 수 있습니까?

+0

매우 자주 묻습니다. 키워드 "Qt thread gui"로 검색해보십시오. –

+0

주 스레드에서 위젯을 만들고 신호/슬롯을 사용하여 나중에 채우는 것이 좋습니다. 더 나은 - [MVC] (http://qt-project.org/doc/qt-4.8/model-view-programming.html)를 사용하십시오. – elmigranto

답변

5

아니요, 기본 스레드 내에서만 GUI 위젯을 만들 수 있습니다.

일반적으로 위젯의 일부인 GUI을 만드는 데 시간이 많이 걸리지 않습니다. 작업 시간이 오래 걸리면 위젯 생성 프로세스에서 추출하고 별도의 스레드에서 처리 한 다음이 작업 결과를 새로 만든 위젯에 전달해야합니다. 위젯의 일부 복잡한 테이블이있는 경우

편집

, 당신은 Qt MVC 시스템, 즉 QTableViewQAbstractTableModel에 따라 모델을 사용해야합니다. 그런 다음 다른 스레드에서 모델을 채운 다음 주 스레드에서 생성 된보기에만 할당 할 수 있습니다.

+0

실제로 위젯을 만드는 데는 많은 시간이 걸립니다. 수천 개의 행과 수십 개의 열이있는 테이블입니다. –

+0

어떤 경우에는 별도의 모델과 뷰를 사용하는 것이 더 나을 것입니다. 모델을 별도의 스레드에 채우고 준비가되면 테이블 뷰에 설정하십시오. –

+0

@JurajBlaho, 내 편집 참조 – Lol4t0

관련 문제