2013-07-15 67 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