0

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

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 ?提前致谢。

4

1 回答 1

1

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

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

如果不了解您的 Dictionary 的用途、是否已排序、是否包含重复条目等等,很难就适当的数据结构提出可靠的建议。

于 2016-12-14T21:05:27.440 回答