【问题标题】:Declaration of Qvector from std vector从标准向量声明 Qvector
【发布时间】:2021-04-03 16:56:05
【问题描述】:

我正在尝试从 std::Vector 创建一个 Qvector。

我当然可以使用 for 循环逐个元素地复制它,但我正在寻找更好的方法。

所以我尝试了:

QVector<double> qv  = QVector<double>::fromStdVector(values) ;

这很好用,但我收到一条警告说它已被弃用。

我听从了 copying a std::vector to a qvector 的 Hadi Navapour 的建议

并尝试了以下方法:

    QVector<double> qv  = QVector<double>(values.begin(), values.end());

但是这段带有 begin() 和 end() 的代码无法编译,我收到以下错误:

错误:没有匹配的调用函数 'QVector::QVector(std::vector::iterator, std::vector::iterator)’ QVector qv = QVector(values.begin(), values.end());

我相信这应该使用下面的构造函数QVector(InputIterator first, InputIterator last)

我无法让它工作。

有人能解释一下将 std::vector 复制到 Qvector 的正确方法吗?

提前致谢!

【问题讨论】:

  • 在 Qt 5.14 中引入了采用一对迭代器的 QVector 构造函数。您可能使用的是早期版本。
  • 好点,我会在我的电脑上再次检查我的qt版本并回复你!但假设我使用的是早于 5.14 的版本,并且不想使用已弃用的 fromStdVector,我该怎么办?
  • 嗯,fromStdVector 在 Qt 5.14 中已被弃用,正是因为提供了替代品。如果您不能使用任何一个,那么您将在循环中一个一个地推送元素;你可以为此编写一个辅助函数,类似于fromStdVector
  • Qvector, qvector, std::Vector -- 谁在乎,只要它编译?哦,等等……
  • @IgorTandetnik,刚刚检查了我的 qt 创建者帮助 > 关于“基于 Qt 5.15.1(GCC 5.3.1 20160406(Red Hat 5.3.1-6),64 位)”我的 qt 5.15应该能够支持迭代器构造函数...我可以手动复制或仅使用已弃用的函数,我只是想知道为什么会出现这种奇怪的行为...

标签: c++ qt qt5 qvector


【解决方案1】:

文档 https://doc.qt.io/qt-5/qvector.html#fromStdVector 强制使用 5.14 版的范围构造函数。

所以你可以使用版本标志来实现。

如果您有兴趣,请尝试如下所述。

#if QT_VERSION <= QT_VERSION_CHECK(5,14,0)
    QVector<double> qv  = QVector<double>::fromStdVector(values) ;
#else
    QVector<double> qv  = QVector<double>(values.begin(), values.end());
#endif

【讨论】:

  • 感谢您的回复,正如我刚刚在对原始帖子的评论中提到的,我的 qt 版本是 5.15,它应该能够支持迭代器构造函数...我可以手动复制或只是使用已弃用的功能,我只是想知道为什么会出现这种奇怪的行为...
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多