我对C ++编程很陌生,所以我可能只是错过了一些东西,但是我一直在努力解决这个问题近一个小时了。
我的QLabels
中有一组UI
,我希望每秒更新一次。它更新的数据存储在大小为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>)'
我做错了什么?
答案 0 :(得分:1)
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)));
一些注意事项:
QVector<int>
更喜欢vector<int>
,或者如果你使用的是修正大小:array<int, 12>
QVector
对于标准容器,您希望避免使用at
函数,更喜欢下标运算符at
,即使在发布中也会产生边界检查费用答案 1 :(得分:0)
为防止出现此类问题,请尽可能摆脱指针,在堆栈上分配变量。
这是C ++,not Java。你必然会以这种方式获得大量内存泄漏,因为没有垃圾收集器。它可以让你免于上述许多麻烦。