QVector<;int>;[索引]返回另一个QVector? 我对C++编程有点新,所以我可能只是缺少了一些东西,但是我已经试着把它弄明白了将近一个小时。
我的QVector<;int>;[索引]返回另一个QVector? 我对C++编程有点新,所以我可能只是缺少了一些东西,但是我已经试着把它弄明白了将近一个小时。,c++,qt,qvector,C++,Qt,Qvector,我的UI中有一组qlabel,我想每秒更新两次。更新后的数据存储在大小为12的QVector中 MainWindow::MainWindow(QWidget *parent) : [...] knobCoords(new QVector<int>(12)), updateTimer(new QTimer(this)) { connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateCoordLabe
UI
中有一组qlabel
,我想每秒更新两次。更新后的数据存储在大小为12的QVector
中
MainWindow::MainWindow(QWidget *parent) :
[...]
knobCoords(new QVector<int>(12)),
updateTimer(new QTimer(this))
{
connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateCoordLabels()));
updateTimer->start(500);
}
然而,当我编译程序时,我得到一个类型不匹配。由于某些原因,knobCoords[index]
不会像预期的那样返回int
,而是返回QVector
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>)'
mainwindow.cpp:124:错误:C2665:'std::to_string':9个重载都无法转换所有参数类型
[...]
mainwindow.cpp:124:尝试匹配参数列表“(QVector)”时
我做错了什么?
knobCoords
是一个QVector*
,这意味着在对其使用下标运算符之前必须遵守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
不如使用vector
或者使用固定大小的数组:array
at
函数,将下标运算符首选为at
会导致边界检查费用,即使在发布时也是如此为了防止这种情况和类似的问题,尽可能去掉指针,在堆栈上分配变量
这是C++,。这样肯定会导致大量内存泄漏,因为没有垃圾收集器。这将使你免于上述许多麻烦。
所有这些new
的吓唬我knobCoords(new QVector(12))
表明knobCoords
是一个QVector*
(指针,而不是“普通的”QVector
)似乎knobCoords
是一个指针。您需要先取消对它的引用。我认为您的错误与int
无关,而是与std::string
有关。std::to_string
错误意味着您必须存储ui->knobA\u xCoordsLabel
的文本,其余文本使用QString
,而不是std::string
。试着用谢谢你们,我现在解决了。我切换了它,这样knobCoords就不再是指针了,并且使用了QString::number()而不是to_字符串(就像QLabel使用QString一样)。边界检查可能是一个优势,特别是对于初学者。我建议使用它,除非代码中存在真正的瓶颈。@Murphy对每个人都有自己的瓶颈,我只是想强调一下,虽然Qt容器与标准容器没有区别。
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)));