void MainWindow::onTimer() { // 更新数据 for (int i = 0; i < 10000000; i++) { mYDataTol[i] = QRandomGenerator::global()->bounded(1.00); } // 绘制图形 //ui->plot->graph(0)->setData(QVector<double>::fromStdVector(std::vector<double>mYDataTol)); ui->plot->graph(0)->setData(QVector<double>::fromStdVector(std::vector<double>(mYDataTol.begin(), mYDataTol.end())),true); ui->plot->replot(); }报错G:\QTproject\TestTo10million\TestTo10million\qcustomplot.h:5544: candidate function not viable: no known conversion from 'bool' to 'const QVector<double>' for 2nd argument
时间: 2024-03-16 10:44:00 浏览: 139
这个报错信息提示 `setData()` 函数的第二个参数需要传递的是 `QVector<double>` 类型的数据,而你传递了一个 `bool` 类型的数据,导致类型不匹配。
解决方法是将第二个参数改为 `false` 或者省略第二个参数。`false` 表示不更新曲线,而 `true` 表示更新曲线。如果你只是想更新数据,而不需要更新曲线,那么可以将第二个参数设置为 `false`,如下所示:
```
ui->plot->graph(0)->setData(QVector<double>::fromStdVector(std::vector<double>(mYDataTol.begin(), mYDataTol.end())), false);
```
如果你需要更新曲线,请将第二个参数设置为 `true` 或者省略第二个参数,如下所示:
```
ui->plot->graph(0)->setData(QVector<double>::fromStdVector(std::vector<double>(mYDataTol.begin(), mYDataTol.end())));
```
这样就可以解决这个报错了。
相关问题
void MainWindow::moveAgvs(int i),void MainWindow::action_agv() { std::vectorstd::thread threads; threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs))); // 分配小车 for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(& MainWindow::moveAgvs, i)); // 更新 AGV } for (auto& t : threads) { t.join(); ,報錯:no matching function for call to “std:: thread :: _ lnvoker<std::tuple<std::tuple<void...怎麽修改
在这段代码中,报错的原因可能是 `std::thread` 构造函数中的参数类型不正确。在 `std::thread` 构造函数中,第一个参数应该是需要在新线程中运行的函数指针,第二个参数是该函数需要的参数。因此,正确的写法应该是:
```
threads.push_back(std::thread(&MainWindow::moveAgvs, this, i));
```
这样就可以将 `MainWindow` 对象和 `i` 作为参数传递给 `MainWindow::moveAgvs` 函数,并在新的线程中运行该函数。注意,这里使用了 `this` 来显式传递 `MainWindow` 对象的指针。
void assign_task_to_agv(std::vector<Task>& tasks, std::vector<AGV>& agvs);,void MainWindow::moveAgvs(int i),void MainWindow::action_agv() { std::vectorstd::thread threads; threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs))); // 分配小车 for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(& MainWindow::moveAgvs, i)); // 更新 AGV } for (auto& t : threads) { t.join(); ,報錯:no matching function for call to “std:: thread :: _ lnvoker<std::tuple<std::tuple<void(AGVScheduler...怎麽修改
这个错误通常是由于参数类型不匹配导致的。在这段代码中,错误可能是由于 `AGVScheduler::assign_task_to_agv` 函数的参数类型与 `std::thread` 构造函数所需的参数类型不匹配。
请检查 `AGVScheduler::assign_task_to_agv` 函数的定义和声明,确保其参数类型与所需的参数类型一致。如果参数类型正确,请检查代码中是否存在其他语法错误或类型不匹配的情况。另外,在调用 `std::thread` 构造函数时,需要将函数指针和参数一起传递,正确的写法应该是:
```
threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs)));
```
这样就可以将 `tasks` 和 `agvs` 作为参数传递给 `AGVScheduler::assign_task_to_agv` 函数,并在新的线程中运行该函数。注意,这里使用了 `std::ref` 来将 `tasks` 和 `agvs` 引用传递给线程,避免了拷贝。
阅读全文