QT使用qcustomplot 繪製柱狀圖

   今天由於須要在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);



QCPBars的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();



接下來咱們要生成咱們標籤的位置座標,有個公式計算,其生成的向量 coor裏面就對應了個人labels的座標,注意這個座標不是屏幕像素座標,而是它這個座標系的座標,若是不是很明白就把上面的那三個false改成true看下它默認的座標。
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);



最後replot一下
this->ui->widget->replot();
}



而後就完工了 

在MainWindow::MainWindow最後面加上一句 class

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->init_ui();
}
啓動程序就能夠看到開頭的效果了。具體的修改顏色畫刷和QWidget裏的同樣,能夠調整到咱們滿意的效果。
相關文章
相關標籤/搜索