Charts Wt动态图表

Charts Wt动态图表,charts,wt,Charts,Wt,使用Wt,一个用于Web开发的C库,我试图上传一个.wav文件,然后在图表中打印它的值。有没有一种方法可以动态地做到这一点,换句话说就是在已经创建的图表中添加点 我认为,当您有一个模型并更新该模型时,图形会自动更新为视图 创建您自己的模型并在那里执行您的业务逻辑。让Wt处理图形视图。是的,有一种方法可以做到这一点,我曾经编写了一些代码来监控内存使用情况,并将这些信息打印到图表中,就像Windows任务管理器的“性能”选项卡一样。我使用了一个boost线程来不断更新它。下面是一些代码,可以帮助您解

使用Wt,一个用于Web开发的C库,我试图上传一个.wav文件,然后在图表中打印它的值。有没有一种方法可以动态地做到这一点,换句话说就是在已经创建的图表中添加点

我认为,当您有一个模型并更新该模型时,图形会自动更新为视图


创建您自己的模型并在那里执行您的业务逻辑。让Wt处理图形视图。

是的,有一种方法可以做到这一点,我曾经编写了一些代码来监控内存使用情况,并将这些信息打印到图表中,就像Windows任务管理器的“性能”选项卡一样。我使用了一个boost线程来不断更新它。下面是一些代码,可以帮助您解决图表问题

你需要一个WCartesianChart

Wt::Chart::WCartesianChart* _chart_memory_display;
现在,图表的初始化实际上相当棘手。我写了一个函数来实现它注意:这使用了“定义性能”历史记录100这是图表存储的数据量,据我所知没有限制,我只想要最后100点

Wt::Chart::WCartesianChart* CreateCartesianChart(WContainerWidget* parent)
{
WStandardItemModel *model = new WStandardItemModel(PERFORMANCE_HISTORY, 2, parent);

//Create the scatter plot.
Wt::Chart::WCartesianChart* chart = new Wt::Chart::WCartesianChart(parent);
//Give the chart an empty model to fill with data
chart->setModel(model);
//Set which column holds X data
chart->setXSeriesColumn(0);

//Get the axes
Wt::Chart::WAxis& x_axis  = chart->axis(Wt::Chart::Axis::XAxis);
Wt::Chart::WAxis& y1_axis = chart->axis(Wt::Chart::Axis::Y1Axis);
Wt::Chart::WAxis& y2_axis = chart->axis(Wt::Chart::Axis::Y2Axis);

//Modify axes attributes
x_axis.setRange(0, PERFORMANCE_HISTORY);
x_axis.setGridLinesEnabled(true);
x_axis.setLabelInterval(PERFORMANCE_HISTORY / 10);

y1_axis.setRange(0, 100);
y1_axis.setGridLinesEnabled(true);
y1_axis.setLabelInterval(10);

y2_axis.setRange(0, 100);
y2_axis.setVisible(true);
y2_axis.setLabelInterval(10);

//Set chart type
chart->setType(Wt::Chart::ChartType::ScatterPlot);

// Typically, for mathematical functions, you want the axes to cross at the 0 mark:
chart->axis(Wt::Chart::Axis::XAxis).setLocation(Wt::Chart::AxisValue::ZeroValue);
chart->axis(Wt::Chart::Axis::Y1Axis).setLocation(Wt::Chart::AxisValue::ZeroValue);
chart->axis(Wt::Chart::Axis::Y2Axis).setLocation(Wt::Chart::AxisValue::ZeroValue);

// Add the lines
Wt::Chart::WDataSeries s(1, Wt::Chart::SeriesType::LineSeries);
chart->addSeries(s);

//Size the display size of the chart, has no effect on scale
chart->resize(300, 300);

return chart;
}
基本上,WT图表需要一个模型和一个数据系列来准备接收数据。我强烈建议您阅读文档,了解您不认识的功能中的任何内容,我花了一些时间来整理这些内容。另外,请查看WT小部件库,它有图表和代码示例

现在,对于实际更新,我编写了另一个函数

void UpdateChartDisplay(Wt::WAbstractItemModel* data_model, double data)
{
//Update the old data
for(unsigned int i = 0; i < PERFORMANCE_HISTORY; i++)
{
  //Move all data back one index
  data_model->setData(i, 0, i);
  data_model->setData(i, 1, data_model->data(i+1, 1));
}

//Get the last index of the data
int insertion_point = PERFORMANCE_HISTORY - 1;

//Insert new data at the last index
data_model->setData(insertion_point, 0, insertion_point);
data_model->setData(insertion_point, 1, data);
}

双倍输入是添加到图表中的数据本身。我有一个boost线程每秒调用一次这个函数来传递新数据,它在运行时看起来就像任务管理器。我不确定您是在尝试动态更新它,还是只是用数据填充它,但我希望这会有所帮助,让您走上正确的道路

非常感谢。我一直在努力学习Wt示例,它们太复杂了——它们应该提供一个非常简单的工作示例。我发现的Wt文档非常密集,似乎没有简单、一步一步地解释如何做某事。如果你知道一些这样的文件,请让我知道。我喜欢Wt,并且在快速使用它方面没有什么问题,因为我有很多其他GUI框架的经验。但是制图的东西很糟糕。我找到的唯一可靠的文档是他们的标准文档和小部件库。他们还有一个官方论坛,你可以在那里向社区或开发者发布问题。你也可以向开发人员申请功能,事实上,不久前我已经获得了一个批准:D功能#3175除此之外,我只是通过谷歌搜索或挖掘堆栈溢出。我已经看到了大部分这些东西-谢谢。除此之外,我只是在谷歌上搜索或挖掘堆栈溢出:大多数情况下,我只是不断进行黑客攻击,直到找到工作。在使用Qt和gtkmm进行了大量工作后,我发现Wt在大多数情况下都非常优雅和直观——我用它站起来并运行得非常快。但是图表是令人讨厌的——并不是说它在其他框架中好得多——好的图表天生就很复杂,特别是当你用它们进行实时更新时。非常缺乏的是一本关于Wt的好书,它可以组织事情并引导您完成。我喜欢Wt——非常强大的东西。
_chart_memory_display->model()