2016-12-14 6 views
0

У меня есть небольшой класс «Словарь», где я содержал все данные в std :: vector. Я хочу показать эти данные в приложении QT. Поэтому я сделал небольшое исследование, и я обнаружил, что должен использовать ListView следующим образом:Как правильно показать std :: vector в QT?

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

Но это похоже на действительно шоу. Мне нужно обновлять модель ListView каждый раз, когда я добавляю новый элемент в вектор. А также я должен добавить функцию к моему классу Dictionary, чтобы получить QVector:

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; 
    } 

... и это выглядит также очень медленно. У меня есть вопрос: должен ли я переписать свой класс Dictionary с помощью QTL? Если да, то каким образом отображать QVector с помощью ListView (или, возможно, что-то еще) удобным способом? Спасибо заранее.

+0

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

+0

Вы можете написать собственный подкласс QAbstractListModel, который напрямую возвращает данные std :: vector –

ответ

1

Не зная всех ваших требований к вашему классу словаря, моим предложением было бы заменить внутренний std :: vector на QStringListModel, а затем установить его как модель для вашего представления. Когда вы вносите изменения в QStringListModel, он будет автоматически отражен в вашем представлении.

В качестве альтернативы сделайте свой класс словаря моделью путем подклассификации его из QAbstractItemModel. Вы все равно можете сохранить свой std :: vector в качестве внутренней структуры данных, а затем ваши методы «data» и «setData» будут читать и записывать в std :: vector.

Не зная больше о том, для чего предназначен ваш Словарь, независимо от того, сортируется оно или нет, содержит ли он повторяющиеся записи или нет и т. Д., Трудно составить надежные рекомендации по соответствующей структуре данных.