c++ - 取决于时间的重新绘制函数,Qt
问题描述
我正在写一个研究项目,我需要绘制一个依赖于实时的函数。我使用了 QCustomPlot。当我按下按钮时,该图应该开始绘制。所以我写了下一个代码
void MainWindow::on_pushButton_restart_clicked()
{
...
my_timer->restart();
/* Set up and initialize the graph plotting timer */
connect(&timer_plot, SIGNAL(timeout()), this, SLOT(realtimePlot())); // where QTimer timer_plot
timer_plot.start(20);
}
realtimePlot()
好像
void MainWindow::realtimePlot()
{
ui->widget->graph(0)->data()->clear();
double key = my_timer->elapsed() / 1000.0;
static double lastPointKey = 0;
if(key - lastPointKey > 0.002)
{
for (auto& iter : x) {
ui->widget->graph(0)->addData(iter, sin(iter+key));
}
lastPointKey = key;
}
ui->widget->replot();
}
它工作正常,但是当我想重新启动绘图并再次按下按钮时,在绘制绘图之前会有一个延迟,并且随着每次单击按钮而增加,并且绘图的动画变得越来越不流畅。为什么会发生这种情况,我该如何解决?
在这里,您可以观看我的截屏视频。
我从这里获取的实时绘图代码
和MainWindow()
QVector<double> x;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->addGraph();
ui->widget->xAxis->setRange(0, 20);
my_timer->start();
h = 0.05;
x.push_back(0);
for (int i=1; i<=20/h; i++)
{
x.push_back(i*h);
}
}
解决方案
好吧,我发现了问题。是的my_timer->restart()
,但我仍然不知道为什么会导致延迟。根据文档,此功能只是停止并启动计时器。
PS 取决于编译器,它可能不起作用。例如,与clang不同, MinGW不适用于此解决方案
推荐阅读
- go - 在 Go 中 defer 关键字是如何工作的
- sql-server - 如何防止使用 OUTPUT 的 SQL Server 合并更新目标表
- angular - 将参数传递给 Angular 路由器中的匹配器时出现 AOT 错误
- image - 裁剪缩略图并在没有覆盖提示的情况下替换
- excel - 按降序遍历范围
- ios - 如何使我的应用程序显示为从 SD 卡/相机导入照片的选项
- android - 创建 Android 图标的“添加图像资源”在哪里?
- excel - 未收到 Next 的错误消息
- c# - 调用 WebApi Endpoint 传入对象
- html - 如何在不使用辅助路线的情况下以角度在特定页面上添加侧边菜单