QVector<int>[index] 返回另一个 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)));
一些注意事项:
- 不要不必要地使用指针。除了您刚刚看到它们引入的混乱之外,如果在对象析构函数中未正确处理它们,它们会导致内存泄漏。随着错误恢复发挥作用,一个更重要的问题
- 将业务逻辑与前端分开。朝着这个方向迈出的一大步是永远不要在内部使用Qt容器。Qt在与标准容器配合方面做得很好,所以与其说
QVector<int>
更喜欢vector<int>
,或者如果你使用的是修复大小:array<int, 12>
- 尽管对于标准容器
QVector
没有任何区别,但您需要避免使用首选下标运算符的at
函数,因为即使在发布中at
也会产生边界检查费用
为了防止此问题和类似问题,请尽可能删除指针,在堆栈上分配变量。
这是C++,而不是Java。这样你一定会得到很多内存泄漏,因为没有垃圾回收器。它将使您免于上述许多头痛。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 将 Qvector<uint8_t> 转换为 QString
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- QVector<int>[index] 返回另一个 QVector?
- 为什么QVector::size返回int ?< / h1 >
- Qt容器(QVector,QList)::end()返回一个无法引用的迭代器
- QVector size()返回大小为0