繁体   English   中英

QVector <int> [索引]返回另一个QVector?

[英]QVector<int>[index] returning another QVector?

我是C ++编程的新手,所以我可能只是想念一些东西,但是现在已经将近一个小时的时间了。

我的UI中有一组QLabels ,我想每秒更新两次。 更新所使用的数据存储在大小为12的QVector<int>中。

MainWindow::MainWindow(QWidget *parent) :
    [...]
    knobCoords(new QVector<int>(12)),
    updateTimer(new QTimer(this))
{
    connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateCoordLabels()));
    updateTimer->start(500);
}

为了更新标签,我需要将int值转换为字符串。 这是直接在updateCoordLabels()函数中完成的:

void MainWindow::updateCoordLabels() {
    tracker->updateCoordData(*knobCoords);
    ui->knobA_xCoordsLabel->setText(to_string(knobCoords[0]));
    ui->knobA_yCoordsLabel->setText(to_string(knobCoords[1]));
    ui->knobA_zCoordsLabel->setText(to_string(knobCoords[2]));
    ui->knobB_xCoordsLabel->setText(to_string(knobCoords[3]));
    [...]
    updateTimer->start(500);
}

但是,当我编译程序时,出现类型不匹配的情况。 出于某种原因, knobCoords[index]不会按预期返回int ,而是返回QVector<int>

mainwindow.cpp:124: error: C2665: 'std::to_string': none of the 9 overloads could convert all the argument types
[...]
mainwindow.cpp:124: while trying to match the argument list '(QVector<int>)'

我究竟做错了什么?

knobCoords是一个QVector<int>*这意味着您必须在其上使用下标运算符之前参考一下knobCoords

您可以改为:

ui->knobA_xCoordsLabel->setText(to_string(knobCoords->at(0)));
ui->knobA_yCoordsLabel->setText(to_string(knobCoords->at(1)));
ui->knobA_zCoordsLabel->setText(to_string(knobCoords->at(2)));
ui->knobB_xCoordsLabel->setText(to_string(knobCoords->at(3)));

一些注意事项:

  1. 不要不必要地使用指针。 除了您看到的混乱之外,如果在对象析构函数中对它们的处理不正确,还会导致内存泄漏。 随着错误恢复的发挥,一个更重要的问题
  2. 将您的业务逻辑与前端分开。 采取此措施的一个好步骤是永远不要在内部使用Qt容器。 Qt在与标准容器QVector<int>很好,因此,比起QVector<int>更喜欢vector<int>或者如果您使用的是fixes size: array<int, 12>
  3. 尽管对于标准容器来说QVector并没有什么区别, QVector您还是要避免使用at函数,而是QVector at下标运算符,因为at函数即使在发布时也会产生边界检查费用

为避免出现此类问题,请尽可能删除指针,并在堆栈上分配变量。

这是C ++, 而不是Java 这样一来,您肯定会发生大量内存泄漏,因为没有垃圾收集器。 它将使您免于遭受上述麻烦的困扰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM