2016-12-14 937 views
0

我有一个小类“Dictionary”,其中包含std :: vector中的所有数据。我想在QT应用程序中显示这些数据。所以我做了一个小小的研究,我发现我应该像这样使用ListView:如何在QT中正确显示std :: vector?

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

...这看起来也很慢。 所以我有一个问题:我应该使用QTL重写我的Dictionary类吗?如果是这样,如何以方便的方式使用ListView(或者别的东西)显示QVector? 在此先感谢。

+0

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

+0

你可以编写一个定制的QAbstractListModel子类,它直接返回std :: vector的数据 –

回答

1

不知道你的Dictionary类的所有需求,我的建议是用QStringListModel替换内部的std :: vector,然后将它设置为你的视图的模型。当您对QStringListModel进行更改时,它会自动反映到您的视图中。

或者,通过从QAbstractItemModel中继承它,使您的Dictionary类成为模型。您仍然可以将std :: vector保留为内部数据结构,然后您的“data”和“setData”方法将读取和写入std :: vector。

不知道更多关于您的词典的用途,无论是否排序,是否包含重复条目等等,很难在适当的数据结构上提出可靠的建议。