一、普通方式
1.下载最新qwt库:
svn co https://qwt.svn.sourceforge.net/svnroot/qwt/trunk/qwt
我安装的是6.0.22.安装qwt库
自动到当前目录的qwt下,依次运行
qmakemake
sudo make install
需要完成下面3,4两步,才能在QtCreator里看见qwt的控件。如果不使用QtCreator方便的控件拖放功能,直接敲代码调用qwt库直接参照6。
3.将qwt针对QtCreater的插件放到指定位置。
sudo cp /usr/local/qwt-6.0.2-svn/plugins/defigner/libqwt_designer_plugin.so /usr/lib/qt4/plugins/designer/
4.将qwt的库文件(*.so)放到QtCreater的指定位置。
sudo cp /usr/local/qwt-6.0.2-svn/lib/* /usr/lib/qtcreator (或/usr/lib/x86_64-linux-gnu/qtcreator)
5.代码中调用了qwt库的内容,需要在工程文件*.pro中添加
INCLUDEPATH += /usr/local/qwt-6.0.2-svn/include
LIBS += -L/usr/local/qwt-6.0.2-svn/lib -lqwt
6.运行环境设置:为了编译出来的程序运行时能够顺利调用libqwt.so,需要在/etc/profile 里建立环境变量 LD_LIBRARY_PATH变量。
sudo vi /etc/profile
添加一行 export LD_LIBRARY_PATH=/usr/lib/qtcreator
马上让变量生效 source /etc/profile
在QtCreator里运行编译出来的程序需要添加环境变量LD_LIBRARY_PATH:项目 -> 运行设置 -> 运行时的环境变量 -> 添加变量:LD_LIBRARY_PATH 值为:/usr/lib/qtcreator
如果不在QtCreator里进行设置,程序在IDE里运行时会报错:
/home/test/test_QwtSyntheticPointData/test_QwtSyntheticPointData 启动中...
/home/test/test_QwtSyntheticPointData/test_QwtSyntheticPointData: error while loading shared libraries: libqwt.so.6: cannot open shared object file: No such file or directory
/home/test/test_QwtSyntheticPointData/test_QwtSyntheticPointData 退出, 代码: 127
二、推荐:手动安装qwt的方式
1.下载qwt库
svn co https://qwt.svn.sourceforge.net/svnroot/qwt/trunk/qwt
2.自动到当前目录的qwt下,依次运行qmake
make
sudo make install
3.将qwt针对QtCreater的插件放到指定位置。
sudo cp /usr/local/qwt-6.1.0-svn/plugins/designer/libqwt_designer_plugin.so /usr/lib/qt4/plugins/designer/
sudo chmod 777 /usr/lib/qt4/plugins/designer/libqwt_designer_plugin.so
4.将qwt的库文件(*.so)放到QtCreater的指定位置。
sudo cp /usr/local/qwt-6.1.0-svn/lib/* /usr/lib/x86_64-linux-gnu/qtcreator
或
/usr/lib/qtcreator
完成3,4两步,才能在QtCreator里看见qwt的控件。
5.在/etc/profile 里建立环境变 LD_LIBRARY_PATH变量。
export LD_LIBRARY_PATH=/usr/local/qwt-6.1.0-svn/lib
source /etc/profile
6.如果没有做3,4,5这几步,代码中调用qwt库的内容,只需在工程文件*.pro中添加
INCLUDEPATH += /usr/local/qwt-6.1.0-svn/include
LIBS += -L/usr/local/qwt-6.1.0-svn/lib -lqwt
三、举例说明
该实例绘制了两条sin曲线并自动刷新曲线显示,一个曲线跟前篇一样是平缓曲线,另一条是硬拐点曲线,之后按动按键使两个曲线均向右平移,注意,同时移动多条曲线的情况下不要使用setData函数了,程序会错误退出,应该使用setSamples函数,具体参见代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QDebug>
#include <Qt/qmath.h>
#include <QVector>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_magnifier.h>
#include <qwt_plot_panner.h>
#include <qwt_legend.h>
#include <qwt_point_data.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QwtPlotCurve curve;
QwtPlotCurve curve_r;//硬折点曲线画布
QVector<double> xs;
QVector<double> ys;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHBoxLayout>
#include <QtGui/QApplication>
#include <Qt/qmath.h>
#include <QVector>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_magnifier.h>
#include <qwt_plot_panner.h>
#include <qwt_legend.h>
#include <qwt_point_data.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->plot->resize(640,400);
ui->plot->setAutoReplot(true);
//设置坐标轴的名称
ui->plot->setAxisTitle(QwtPlot::xBottom, "x->");
ui->plot->setAxisTitle(QwtPlot::yLeft, "y->");
//设置坐标轴的范围
ui->plot->setAxisScale(QwtPlot::yLeft, -1.0, 1.0);
//设置右边标注
ui->plot->insertLegend(new QwtLegend(), QwtPlot::RightLegend);
//使用滚轮放大/缩小
(void) new QwtPlotMagnifier( ui->plot->canvas() );
//使用鼠标左键平移
(void) new QwtPlotPanner( ui->plot->canvas() );
//计算曲线数据
for (double x = 0; x < 2.0 * M_PI; x+=(M_PI / 10.0))
{
xs.append(x);
ys.append(qSin(x));
}
//平滑曲线
curve.attach(ui->plot);//把曲线附加到plot上
curve.setSamples(xs,ys);
curve.setStyle(QwtPlotCurve::Lines);//设置曲线上是点还是线,默认是线,所以此行可不加
curve.setCurveAttribute(QwtPlotCurve::Fitted, true);//使曲线更光滑,不加这句曲线会很硬朗,有折点
curve.setPen(QPen(Qt::blue));//设置画笔
curve_r.attach(ui->plot);
curve_r.setSamples(xs,ys);
curve_r.setPen(QPen(Qt::green));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
for(int i=ys.count()-1;i>=1;i--)
{
ys[i]=ys.at(i-1);
}
ys[0]=0.5;
curve.setSamples(xs,ys);
curve_r.setSamples(xs,ys);
}
下面是按动按钮几次后的截图:
注意两条线不同的过渡变化



被折叠的 条评论
为什么被折叠?



