2013-07-15 33 views
2

使用重量,C库为Web开发,我想上传一个.wav文件,然后在图表中打印出它的价值。有没有办法做到这一点,换句话说,要添加点到已经创建的图表?重量动态图表和图形

回答

1

我认为当你有一个模型,并更新该模型,自动更新视图中的图表。

创建自己的模型,做你的业务逻辑存在。让Wt处理图形视图。

+0

谢谢但我该如何更新模型? – user2424276

+0

看图表示例:http://www.webtoolkit.eu/wt/examples/charts –

4

是的,是有办法做到这一点,我曾经写过一些代码来监视内存的使用和打印图表中的信息,就像在Windows任务管理器的性能选项卡。我使用了一个增强线程来持续更新它。以下是一些代码,可能会使您的图表问题朝着正确的方向发展。

您将需要一个WCartesianChart

Wt::Chart::WCartesianChart* _chart_memory_display; 

现在,图表初始化实际上是相当棘手的。我写了一个功能来做到这一点。 注意:这使用#define PERFORMANCE_HISTORY 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); 
} 

,该data_model是正在更新图表的只是模型,

_chart_memory_display->model() 

双进来,是被添加到图表的数据本身。我有一个boost线程每秒都会调用这个函数传递新数据,它看起来和运行时的任务管理器完全一样。我不确定你是否试图动态更新它,或者只是用数据填充它,但我希望这可以帮助你,并把你放在正确的轨道上!

+0

非常感谢。我一直在努力处理Wt的例子,这些例子太复杂了 - 他们应该提供一个非常简单的工作例子。我发现的Wt文档非常密集,似乎没有解释如何一步一步地做简单的事情。如果你知道一些文档,请告诉我。我喜欢Wt,并且在加快速度的时候遇到了很多问题,并且有许多其他GUI框架的经验。但制图的东西是讨厌的。 – Vector

+0

我发现的唯一可靠的文档是他们的标准文档http://www.webtoolkit.eu/wt/doc/reference/html/index.html和小部件库。他们还有一个官方论坛http://redmine.webtoolkit.eu/projects/wt/boards,您可以在这里向社区或开发者发布问题。你也可以要求开发者的功能,其实我有一个不久前批准的功能:D功能#3175 http://redmine.webtoolkit.eu/issues/3175#change-9919 除此之外,我只是谷歌或挖通过堆栈溢出。 – user2115945

+0

我见过最多的东西 - 谢谢。除此之外,我只是Google或通过Stack Overflow_挖掘:大多数情况下,我只是继续黑客攻击,直到我找到工作。经过Qt和gtkmm的努力,我发现Wt在大多数时间都非常优雅和直观 - 我起床并且运行得非常快。但是图表是令人讨厌的 - 并不是说​​它在其他框架中好得多 - 好的图表本质上是复杂的,特别是如果您正在使用它们进行实时更新。真正缺乏的是一本关于Wt的好书,它组织事物并引导你。我喜欢Wt - 非常强大的东西。 – Vector