2

QStandardItemModelQListView에 바인딩하고 배경/비 UI 스레드에서 업데이트 한 모델을 가지고있는 Qt4 앱이 있습니다.UI가 아닌 QThread에서 QStandardItemModel을 수정 하시겠습니까?

가끔 QStandardItemsetText(..) 메서드가 UI가 아닌 스레드에서 반복적으로 호출되면 응용 프로그램이 la dataChanged (..) 처리기에서 충돌합니다. for 루프에서 setText("xxxxx")을 반복적으로 호출하여 문제를 재현 할 수 있습니다. 내 응용 프로그램에서는 데이터가 네트워크에서 읽혀 지므로 별도의 비 UI 스레드로 모델을 업데이트합니다.

이것은 일반적인 pb입니까? 올바르게 이해하면 이것은 대기중인 연결과 관련이 있으며 QStandardItemModel은 스레드로부터 안전하지 않습니까? 이 문제를 해결하는 방법은 무엇입니까?

감사합니다.

답변

4

QStandardItemModel은 QtGui 라이브러리의 일부이며, iirc의 모든 클래스는 스레드 세이프가 아닌 것으로 간주됩니다. 데이터의 실제 설정을 GUI 스레드로 옮기면 좋을 것입니다. 네트워크 스레드의 대기중인 신호를 사용하면 쉽게 처리 할 수 ​​있습니다.

+0

그게 내가해야 할 옵션 인 것 같습니다. 감사! – Gant