안녕하세요, QListView 위젯이 내 사용자 인터페이스에 올바르게 표시되어 있습니다.QListView setModel QMetaObject :: invoke를 통해 호출하는 데 문제가 있습니다.
전적으로 완전히 다른 타사 라이브러리에 대한 콜백을 등록합니다. 이 콜백은 내 사용자 인터페이스와 완전히 별개의 스레드에서 호출됩니다. 나는 QListView 위젯과 상호 작용하는 새로운 데이터 모델을 설정하려면이 콜백이 필요합니다, 그래서 내가 그러나
MyDataModel * model = new MyDataModel(ui->listViewWidget);
QMetaObject::invokeMethod(ui->listViewWidget, "setModel", Q_ARG(MyDataModel *, model));
를 사용할 필요가 생각, 작동하지 않습니다. QListView 위젯에 데이터가 표시되지 않는다. QMetaObject :: invokeMethod에서 반환 값을 디버깅했습니다. 그리고 QListView에 "setModel"이라는 메서드가 없다는 false를 반환합니다. 내가 콜백을 준비 때, 즉 푸시 버튼 on_clicked() 이벤트를 통해 사용자 인터페이스 스레드를 통해 전화를
MyDataModel * model = new MyDataModel(ui->listViewWidget);
ui->listViewWidget->setModel(model);
이 완벽하게 작동로 전화를 걸, 등등 "로 setModel"방법이있다 할 QListView ..
QMetaObject :: invokeMethod가 작동하지 않는 이유를 이해할 수있는 누군가가 도와 주시겠습니까?이 방법으로 invokeMethod를 호출해야하는 이유를 이해할 수 있습니까? 즉, 이벤트 루프 스레드에서 실행할 필요가있는 것에 대한 내 스레드 가정이 맞습니다.
당신은 혼란스럽고 혼란 스럽습니다. 마크.
삭제 해 주셔서 감사합니다. 그렇다면 다른 스레드에서 모델을 설정하는 것에 대해 걱정할 권리가 있습니까? 그렇지 않으면 안전합니까? 또는 UI 이벤트 루프에서 호출되는 메서드를 얻는 또 다른 방법이있을 수 있습니다. – ScaryAardvark
'QMetaObject :: invodeMethod'라는 이름의 연결 유형이'Qt :: QueuedConnection' 또는'Qt :: AutoConnection' 인 경우에는 안전하게 수행 할 수 있습니다. – svm
좋아요, 이제 setModel이 신호 나 슬롯이 아니라는 것을 설명 했으므로 모델을 설정하는 적절한 방법을 찾아야합니다. 나는 틀린 방식으로 접근하고 있거나 어렵지 않을 것이라고 확신합니다. – ScaryAardvark