2016-12-14 1 views
0

나는 작은 데이터베이스 인 "Dictionary"를 가지고 있는데, std :: vector에 모든 데이터가 들어있다. 이 데이터를 QT 애플리케이션에 표시하고 싶습니다. 그래서 나는 작은 연구를했고 ListView를 다음과 같이 사용해야 함을 발견했다.QT에서 std :: vector를 올바르게 표시하는 방법은 무엇입니까?

ui->WordList->setModel(new QStringListModel(QList<QString>::fromVector 
              (dict->getQVector()))); 

그러나 이것은 실제로 보이는 것처럼 보입니다. 벡터에 새 요소를 추가 할 때마다 ListView 모델을 업데이트해야합니다. 또한 QVector를 얻기 위해 Dictionary 클래스에 함수를 추가해야합니다.

QVector<QString> getQVector() { 
    QVector<QString> qv; 
    for (size_t i = 0; i < container.size(); i++) { 
     qv.push_back(QString::fromStdString((std::string)container[i])); 
    } 
    return qv; 
    } 

...이 또한 매우 느립니다. QTL을 사용하여 Dictionary 클래스를 다시 작성해야합니까? 그렇다면 ListView (또는 다른 무엇)를 사용하여 QVector를 편리한 방식으로 표시하는 방법은 무엇입니까? 미리 감사드립니다.

+0

http://stackoverflow.com/questions/32084336/how-to-properly-add-strings-to-qlistwidgets –

+0

std :: vector의 데이터를 직접 반환하는 사용자 지정 QAbstractListModel 하위 클래스를 작성할 수 있습니다 –

답변

1

Dictionary 클래스에 대한 모든 요구 사항을 모른 채 내 제안은 내부 std :: vector를 QStringListModel로 바꾸고 해당 모델을보기로 설정하는 것입니다. QStringListModel을 변경하면 뷰에 자동으로 반영됩니다.

또는 QAbstractItemModel에서 서브 클래 싱하여 사전 클래스를 모델로 만듭니다. std :: vector를 내부 데이터 구조로 유지 한 다음 "data"및 "setData"메서드를 사용하여 std :: vector에서 읽고 쓸 수 있습니다.

사전이 무엇인지, 정렬 여부에 상관없이, 중복 항목이 있는지 여부 등을 알지 못하는 경우 적절한 데이터 구조에 대한 확실한 추천을하기가 어렵습니다.

관련 문제