초보자 용 질문이 있습니다. Model-View-Controller 디자인 패턴을 올바르게 이해하는지 확신 할 수 없습니다.QStandardItemModel 전체 파일을 읽은 후 QTableView를 업데이트하십시오.
어쩌면 내 문제를 설명하기 시작합니다. 파일에서 데이터를 읽는 중입니다. 10 초 후에 그 데이터를 테이블에 표시한다고 가정 해 봅시다. 문제는 어떻게 데이터를 저장해야합니까? QStandardItemModel
외에도 파일에서 데이터를 읽고 다른 스레드에서 사용할 다른 컨테이너가 있어야합니까? 예를 들어 Gui 스레드에 QStandardItemModel
이 있고 다른 컨테이너를 만들면 QVector
이라고합시다. 파일의 데이터를 QVector
으로로드 한 다음 데이터를 QVector
에서 QStandardItemModel
으로 옮깁니 까?
내가 다른 스레드에서 QStandardItemModel
를 사용하고 QStandardItemModel
에 파일에서 직접 데이터를 읽을 수 없습니다 QStandardItemModel
이 appendRow
후보기를 업데이트하는 신호를 방출하기 때문에 내가 아는 한 GUI 동결 때문이다.
아니면 전체 파일을 QStandardItemModel
에로드 할 때만 사용자 지정 모델을 만들고 메서드를 추가하여보기를 업데이트해야합니까? QTableView
에는 데이터 용 컨테이너가 있으며 모델과 동기화되지 않았습니까? 그것은 가능/올바른 방법입니까?
새 파일을 읽을 때 어떤 상황입니까?
도움 주셔서 감사합니다.
파일에서 한 번만 또는 몇 번만 데이터를로드 하시겠습니까? –
예, 둘 이상입니다. 하나만있는 경우에는 GUI와 파일 스레드간에 QStandardItemModel을 공유 할 수 있다고 생각합니다. 새 파일을 읽을 때 모델을 새 데이터로만 채우고 싶습니다. 나는 파일을 읽을 때마다 새 모델을 설정하는 것에 대해 생각하고 있었지만 멋지고 효율적인 해결책이 아닌 것 같아요. btw. 이 경우 오래된 QStandardItemModel에서 메모리를 제거하는 방법은 무엇입니까? – Cherubim
파일을 모델로 읽으 려 할 때 * 10 초 * 걸리면 매우 큰 ** 행/열 수를가집니다. QStandardItemModel에서 한번에로드하지 않고'QAbstractItemModel', ['canFetchMore'] (https://doc.qt.io/qt-5/qabstractitemmodel.html#canFetchMore)을 사용하여 게으른 로딩을하는 것이 좋습니다. , ['fetchMore'] (https://doc.qt.io/qt-5/qabstractitemmodel.html#fetchMore). 이것은 [QSqlQueryModel'] (https://code.qt.io/cgit/qt/qtbase.git/tree/src/sql/models/qsqlquerymodel.cpp#n190)에서 내부적으로 사용되는 전략인데, 대형 * 모델. – Mike