繼上篇文章(Simple bar chart)推出以後,本篇文章繼續ChartDirector的使用。在這篇Blog中,博主實現的是soft lighting bar。soft lighting bar是在一個XYChart中具有多個Bar的圖表,每個Bar具備柔和光影效果(soft lighting)。在Bar chart大類中,還有glass lighting效果,也是在Bar的光影上面作功夫。這種效果主要是經過在添加圖層(BarLayer)時,傳遞不一樣的參數實現。用戶經過在設置面板進行配置,能夠實現輸出不一樣色調和格式的圖表。windows
(圖一) 總體界面函數
(圖二) 設置圖表的背景色和柵格顏色字體
(圖三) 選擇圖表文件保存路徑及格式(僅支持bmp,jpg,png,gif格式)spa
(圖四) 保存完成,提示保存路徑code
(圖五)由上述配置生成的圖表對象
在Qt中使用ChartDirector,配置好工程屬性並拷貝相應的庫文件到工程目錄下。如下以繪圖代碼爲主進行分析:blog
1 //Y軸數據 2 const double data[] = {450, 560, 630, 800, 1100, 1350, 1600, 1950, 2300, 2700}; 3 //X軸標記 4 const char* lbs[] = {"1996", "1997", "1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005"}; 5 //給圖表添加標題,該標題繪製於PlotArea區域之外。指定文本內容的時候,咱們還須要指定文本字體,以及字體大小。 6 //在windows XP系統的C:\WINDOWS\Fonts下,能夠查看系統所帶字體庫。 7 c->addTitle(msg.mainTitle.c_str(), "timesbi.ttf", 18); 8 // 設置PlotArea區域,setPlotArea()函數所帶參數較多,在這裏咱們能夠設置PlotArea區域的大小以及在Chart畫布中的位置。 9 // 前面四個參數設置PlotArea區域在XYChart繪圖座標中的位置及大小,最後的兩個參數指定水平、垂直柵格線的顏色。 10 // XYChart的linearGradientColor()能夠用於設置PlotArea區域的漸變色,前面四個參數指定漸變區域,後面的兩個顏色值指定 11 // 顏色漸變範圍。 12 c->setPlotArea(50, 40, 340, 250, 13 c->linearGradientColor(30, 20, 30, 290, msg.bgColor, 0x000000), 14 -1, 15 0xffffff, 16 msg.gridColor, 17 msg.gridColor); 18 // 添加一個圖層BarLayer。在這個圖層中,咱們使用了IntArray(0, 0)來指定Bars的顏色值。也就是說,咱們並無指定Bar的顏色。 19 // 在這種狀況下,ChartDirector會自動從默認調色板中依次選擇顏色來填充Bars。 20 // 在這裏咱們調用了setBorderColor()來設置soft lighting效果。根據不一樣的值:Left, Right,光影出如今bars的不一樣側。 21 c->addBarLayer(DoubleArray(data, (int)(sizeof(data)/sizeof(data[0]))), 22 IntArray(0, 0))->setBorderColor(Chart::Transparent, Chart::softLighting(msg.lightDirection)); 23 // 設置X軸標記 24 c->xAxis()->setLabels(StringArray(lbs, (int)(sizeof(lbs)/sizeof(lbs[0])))); 25 // 設置X軸的標記位移。 26 c->xAxis()->setTickOffset(0.5); 27 // 設置X, Y軸的標題說明的字體和字體大小 28 c->xAxis()->setTitle(msg.xTitle.c_str(), "timesbi.ttf", 8); 29 c->yAxis()->setTitle(msg.yTitle.c_str(), "timesbi.ttf", 8); 30 // 設置X, Y軸軸線的寬度,這裏爲2個像素寬。 31 c->xAxis()->setWidth(2); 32 c->yAxis()->setWidth(2);