今天由於須要在QT底下繪製一個柱狀圖,因爲不想本身麻煩重載一個QWidget因此就在網上搜索到了QCustomPlot,按照這個項目主頁的圖像顯示它是能夠知足個人要求。 app
首先來看一下效果圖(繪製風格,畫刷,顏色都使用的默認的) ui
先將下載來的QCustomPlot.cpp QCustomPlot.h拷貝到你的工程裏 this
首先在QtCreator中拖出一個QWidget,而後提高爲QCustomPlot類。 spa
假設該成員變量爲widget. .net
柱狀圖咱們須要兩個數據,一個是每一個柱的相應標籤(QString),一個就是其值(double) code
void MainWindow::init_ui() { QVector<QString> labels(5); QVector<double> values(5); for(int i=0;i<5;++i) labels[i]=QString("MAC")+('0'+i); values[0]=(10.05); values[1]=23; values[2]=12; values[3]=19.3; values[4]=20;
咱們使用QCustomPlot提供的QCPBars來表示柱狀圖 get
QCPBars* bars=new QCPBars(this->ui->widget->xAxis,this->ui->widget->yAxis); QVector<double> index(5); for(int i=0;i<5;++i) index[i]=i; bars->setData(index,values);
添加完了繪製的柱狀圖,接下來添加標籤,要想徹底本身定義標籤,須要先執行如下代碼關閉默認的底部標籤自動生成 it
this->ui->widget->xAxis->setAutoTicks(false); this->ui->widget->xAxis->setAutoTickLabels(false); this->ui->widget->xAxis->setAutoTickStep(false);
先將bars添加到widget上吧,而後自動調整下座標系 table
this->ui->widget->addPlottable(bars); this->ui->widget->rescaleAxes();
double wid=this->ui->widget->xAxis->range().upper-this->ui->widget->xAxis->range().lower; double cl=bars->width()+(1.0*wid-bars->width()*5)/4; QVector<double> coor; for(int i=0;i<5;++i) coor.append(this->ui->widget->xAxis->range().lower+i*cl+bars->width()/2); this->ui->widget->xAxis->setTickVector(coor); this->ui->widget->xAxis->setTickVectorLabels(labels);
this->ui->widget->replot(); }
在MainWindow::MainWindow最後面加上一句 class
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); this->init_ui(); }啓動程序就能夠看到開頭的效果了。具體的修改顏色畫刷和QWidget裏的同樣,能夠調整到咱們滿意的效果。