Qt开发1--QCustomPlot的第一个示例

本文记录了在Linux上使用QCustomPlot进行一个基本绘制所需的完整过程,包括如何使用qtcreator,编辑ui以及编写相应的C++代码。以下是详细步骤:

1、使用qtcreator启动开发环境:

[blctrl@main-machine qt]$ qtcreator

启动后,显示以下一个操作界面:

Qt开发1--QCustomPlot的第一个示例_第1张图片

 2、通过菜单栏File->New File or Project启动项目新建向导:

Qt开发1--QCustomPlot的第一个示例_第2张图片

3、选择Application->Qt Widgets Application后点击Choose,进入以下一个窗口:

Qt开发1--QCustomPlot的第一个示例_第3张图片

填入自己的项目名称并且选择项目存储路径,勾选复选项,点击Next按钮。

4、在接下来出现的对话框中,都点击next按钮,直到遇到带有finish按钮的对话框,点击finish后,完成项目创建。

Qt开发1--QCustomPlot的第一个示例_第4张图片

在点击最后一个对话框中finish按钮后,出现以下一个界面:

Qt开发1--QCustomPlot的第一个示例_第5张图片 5、复制下载的QCustomPlot头文件和源文件到这个项目路径下:

[blctrl@main-machine qt]$ cd plot
[blctrl@main-machine plot]$ ls
main.cpp  mainwindow.cpp  mainwindow.h  mainwindow.ui  plot.pro  plot.pro.user
[blctrl@main-machine plot]$ cp ../qcustomplot/qcustomplot.* ./
[blctrl@main-machine plot]$ ls
main.cpp  mainwindow.cpp  mainwindow.h  mainwindow.ui  plot.pro  plot.pro.user  qcustomplot.cpp  qcustomplot.h

 6、修改plot.pro文件,内容如下:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11                            
lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11   

TARGET = plot
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
	qcustomplot.cpp

HEADERS  += mainwindow.h \
	qcustomplot.h

FORMS    += mainwindow.ui

 7、保存以上文件后,项目窗口中,Sources和Headers分别增加了一个qcustomplot.cpp源文件和qcustomplot.h头文件。

8、双击项目下Forms中mainwindow.ui文件,弹出一个图形编辑窗口:

Qt开发1--QCustomPlot的第一个示例_第6张图片

 9、点击控件,将Containers下Widget控件拖动到所编辑窗口上。将鼠标放置在空白窗口区,点击水平布局。此时,被拖入的widget将占据整个窗口的客户区。

10、点击被拖入的widget,然后右键单击鼠标,在弹出环境菜单中,选择Promoto to...选项,在弹出的对话框中Promoted Class栏输入QCustomPlot,点击Promote按钮。

Qt开发1--QCustomPlot的第一个示例_第7张图片

 11、将属性窗口中,objectName从widget改成customPlot。

Qt开发1--QCustomPlot的第一个示例_第8张图片

 12、编辑头文件mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include "qcustomplot.h"  // 添加QCustomPlot类的头文件

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void setupDemo(QCustomPlot * customPlot);  //编辑一个进行绘制的成员函数

private:
    Ui::MainWindow *ui;
    QString demoName;    // 添加一个成员变量
};

#endif // MAINWINDOW_H

13、编辑头文件mainwindow.cpp源文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    setGeometry(400, 250, 542, 390);

     setupDemo(ui->customPlot);

}

MainWindow::~MainWindow()
{
    delete ui;
}


// 绘图成员函数的实现
void MainWindow::setupDemo(QCustomPlot * customPlot)
{
    demoName = "Simple Plot Demo";
    // 产生数据:
    // 进行初始化
    QVector x(101), y(101); 
    for (int i=0; i<101; ++i)
    {
      x[i] = i/50.0 - 1; // x从-1到1
      y[i] = x[i]*x[i];  // 绘制2次函数
    }
    // 创建图形并且将数据赋给它:
    customPlot->addGraph();
    customPlot->graph(0)->setData(x, y);
    // 设置轴的标签:
    customPlot->xAxis->setLabel("x");
    customPlot->yAxis->setLabel("y");
    // 设置轴的范围,因而可以看到全部数据:
    customPlot->xAxis->setRange(-1, 1);
    customPlot->yAxis->setRange(0, 1);

  // 设置窗口标题栏名称
  setWindowTitle("QCustomPlot: " + demoName);
  statusBar()->clearMessage();
  ui->customPlot->replot();
}

14、点击编译,编辑成功后,点击运行按钮:

Qt开发1--QCustomPlot的第一个示例_第9张图片

 15、显示运行如下的程序:

Qt开发1--QCustomPlot的第一个示例_第10张图片

本教程将customPlot用作指向QCustomPlot实例地指针。如果你已经在QCreator中提升了一个widget,并且将其名称更改为customPlot后,你将可以通过ui->customPlot访问这个widget。

你可以通过customPlot->addGraph()创建一个新图形。接着例如通过customPlot->graph(0)->setData(...)为这个图形分配一些数据点,例如为X和Y(键和值)用QVector(double)地形式。QCustomPlot使用术语键和值而不是x和y的原因是在分配哪个轴有什么角色中更加灵活。因而如果你定义左轴为"键轴"和底轴为"值轴",你可以绘制一张在绘图左面直立的图形。默认,QCustomPlot widget有类型QCPAxis的四个轴:customPlot->xAxis, yAxis, xAxis2和yAxis2,对应底、左,上和右轴。它们的范围定义了绘图哪部分当前可见:customPlot->xAxis->setRange(-1, 1);

要使得绘图的任何类型编号显示在屏幕上,调用customPlot->replot()。注意:当wiget尺寸变化时以及当内建用户交互被触发时,将自动发生重绘。这样的用户交互例如用鼠标拖动轴范围以及用鼠标滚轮缩放。

由这个轴当前使用的轴ticker,自动选择刻度步长和标签。这是类型QCPAxisTicker的实例,并且例如通过xAxis->ticker()是可访问的。你可以通过xAxis->ticker()->setTickCount(6)调整ticker尝试创建的近似刻度数。默认的轴ticker很适合于简单的数值显示,然而有专用的类,例如,用于时间跨度,日历日期,类别,pi(或者其它符号单位)以及对数轴。详细见QCPAxisTicker。

Axes的刻度标签(数值)不超出这个widget的边框,即使当它们变得更宽。这是由于自动的边缘计算,默认其被开启。如果刻度标签和axis标签需要更多空间,它使得axis矩形收缩。如果你不想要边沿被自动确定,通过调用customPlot->axisRect()->setAutoMargins(QCP::msNone)禁用这种行为。接着你可以通过customPlot->axisRect()->setMargin(..)手动调整边沿。

更改外观:

1)图形:图形外观具有很多因素的特点,它们都可以被修改。以下是重要的因素:

  • 线型:调用graph->setLineStyle(..)。对于所有可能的线型,见QCPGraph::LineStype文档,或者在介绍页的线型demo截图。
  • 线笔:QPainter-框架提供的所有笔都是可用的,例如,实心,虚线,点,不同宽度,颜色,透明等。通过graph->setPen(..)设置配置的笔。
  • 散点符号:调用graph->setScatterStyle(..)来更改散点符号的外观。所有可能的散点类型,见QCPScatterStyle(...)文档或者介绍页上散点类型demo。如果你在数据点不想要任何散点符号,设置图形的散点类型为QCPScatterStyle::ssNone。
  • 在图形下或者在图形之间填充:QPainter框架提供的所有刷子在图形填充中都能被使用:实心,各种模式,纹理,梯度,颜色,透明度等。通过graph->setBursh(..)设置配置的刷子。

2):通过修改绘制axis使用的笔以及它们的标签使用的字体修改axis的外观。查看QCPAxis的文档见其解释。这是一个最重要属性的概要:SetBasePen, setTickPen, setTickLength, setSubTickLength, setSubTickPen, setTickLabelFont, setLableFont, setTickLabelPadding, setLabelPadding。你可以用setRangeReversed反向一个axis(例如:使得从左到右值递减而不是递增)。如果你在轴末尾想要装饰(例如,箭头),使用SetLowerEnding或setUpperEnding。

3)网格线:通过访问一个轴各自QCPGrid实例修改这个网格。例如,通过访问customPlot->yAxis->grid(),更改网格水平线(其被绑定到左轴)的外观。网格线的外观基本上是绘制它们使用的笔,通过yAxis->grid()->setPen()设置它。在刻度0的网格线可以用不同笔绘制,用setZeroLinePen设置它。如果你不想要用特殊笔绘制0线,只要设置它为Qt::NoPen,并且在刻度0处的网格线将用正常网格笔绘制。子网格线默认被设为不可见。通过grid()->setSubGridVisible(true)激活它们。

你可能感兴趣的:(Qt,qt,开发语言)