歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

QT使用QCustomPlot 繪制柱狀圖

今天因為需要在QT底下繪制一個柱狀圖,由於不想自己麻煩重載一個QWidget所以就在網上搜索到了QCustomPlot,按照這個項目主頁的圖像顯示它是可以滿足我的要求。

首先來看一下效果圖(繪制風格,畫刷,顏色都使用的默認的)

先將下載來的QCustomPlot.cpp QCustomPlot.h拷貝到你的工程裡

首先在QtCreator中拖出一個QWidget,然後提升為QCustomPlot類。

假設該成員變量為widget.

柱狀圖我們需要兩個數據,一個是每個柱的相應標簽(QString),一個就是其值(double)

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來表示柱狀圖

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表示對應“柱子的值”

添加完了繪制的柱狀圖,接下來添加標簽,要想完全自己定義標簽,需要先執行以下代碼關閉默認的底部標簽自動生成

this->ui->widget->xAxis->setAutoTicks(false);
    this->ui->widget->xAxis->setAutoTickLabels(false);
    this->ui->widget->xAxis->setAutoTickStep(false);

先將bars添加到widget上吧,然後自動調整下坐標系

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最後面加上一句

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->init_ui();
}

Ubuntu 環境下Gtk與QT編譯環境安裝與配置 http://www.linuxidc.com/Linux/2013-08/88539.htm

Linux系統下QT環境搭建 http://www.linuxidc.com/Linux/2013-07/87576.htm

Ubuntu下QT控制台程序無法運行的解決方案以及XTerm的配置方法 http://www.linuxidc.com/Linux/2013-06/86244.htm

Ubuntu 10.04下QT4.7.4移植詳解 http://www.linuxidc.com/Linux/2013-01/77930.htm

Ubuntu 14.04下安裝部署Qt5開發環境 http://www.linuxidc.com/Linux/2014-05/101774.htm

Qt 的詳細介紹:請點這裡
Qt 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved