【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能
在《QWT在QtCreator中的安装与使用》一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能。
首先,我们新建一个Qt应用程序,然后一路默认即可。这时,你会发现总共有:mainwindow.h,mainwindow.cpp,main.cpp,mainwindow.ui四个文件。
然后,选中项目,添加新文件,添加一个c++类,我们假设命名为PlotLines,基类选择QwtPlot,选择继承自QWidget。
接着,在pro文件中添加
INCLUDEPATH +=D:\Qt\Qt5.3.0\5.3\msvc2010_opengl\include\QWT
LIBS+= -lqwtd
注意,我这里是将绘制曲线单独用一个类PlotLines表示的,而不是向参考实例一样是直接放在其他类的内部。所以这里我们需要在类的头文件中添加关键性语句:
#define QWT_DLL
最后,在主文件main.cpp中添加我们类的头文件,并在函数中生成该类的实例并显示,修改后的main.cpp文件如下所示:
- #include "mainwindow.h"
- #include <QApplication>
- #include"plotlines.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- // MainWindow w;//这里的主窗口我们没有使用,当然也可以在主窗口中显示曲线
- // w.show();
- PlotLines line;
- line.show();
- return a.exec();
- }
PlotLines.h文件如下:
- #ifndef PLOTLINES_H
- #define PLOTLINES_H
- #define QWT_DLL
- #include<qwt_plot.h>
- #include <qwt_plot_layout.h>
- #include <qwt_plot_canvas.h>
- #include <qwt_plot_renderer.h>
- #include <qwt_plot_grid.h>
- #include <qwt_plot_histogram.h>
- #include <qwt_plot_curve.h>
- #include <qwt_plot_zoomer.h>
- #include <qwt_plot_panner.h>
- #include <qwt_plot_magnifier.h>
- #include <qwt_legend.h>
- #include <qwt_legend_label.h>
- #include <qwt_column_symbol.h>
- #include <qwt_series_data.h>
- #include <qpen.h>
- #include <qwt_symbol.h>
- #include <qwt_picker_machine.h>
- class PlotLines : public QwtPlot
- {
- Q_OBJECT
- public:
- explicit PlotLines(QWidget *parent = 0);
- private Q_SLOTS:
- void showItem(const QVariant &itemInfo, bool on);//点击图例,显示相应的曲线
- };
- #endif // PLOTLINES_H
PlotLines.cpp文件如下:
- #include "plotlines.h"
- PlotLines::PlotLines(QWidget *parent) :
- QwtPlot(parent)
- {
- setTitle("图的标题");
- //---------设置画布---------//
- QwtPlotCanvas *canvas=new QwtPlotCanvas();
- canvas->setPalette(Qt::white);
- canvas->setBorderRadius(10);
- setCanvas( canvas );
- plotLayout()->setAlignCanvasToScales( true );
- //-----------设置x,y坐标和范围--------------//
- setAxisTitle( QwtPlot::yLeft, "ylabel" );
- setAxisTitle( QwtPlot::xBottom, "xlabel" );
- setAxisScale(QwtPlot::yLeft,0.0,10.0);
- setAxisScale(QwtPlot::xBottom,0.0,10.0);
- //----------------设置栅格线-------------------//
- QwtPlotGrid *grid = new QwtPlotGrid;
- grid->enableX( true );//设置网格线
- grid->enableY( true );
- grid->setMajorPen( Qt::black, 0, Qt::DotLine );
- grid->attach( this );
- //-----------------开始画图----------------------//
- QwtPlotCurve *curve=new QwtPlotCurve("curve");
- // curve->setTitle( "信道"+QString( "%1 " ).arg( i+1));
- curve->setPen(Qt::blue,2);//设置曲线颜色 粗细
- curve->setRenderHint(QwtPlotItem::RenderAntialiased,true);//线条光滑化
- QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
- QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 6, 6) );//设置样本点的颜色、大小
- curve->setSymbol( symbol );//添加样本点形状
- QPolygonF points1, points2;//输入节点数据QPointF(x,y)
- points1<<QPointF(1,1)<<QPointF(2,2)<<QPointF(3,3)<<QPointF(4,4)<<QPointF(5,5)<<QPointF(6,6)<<QPointF(7,7);
- points2<<QPointF(1,2)<<QPointF(2,3)<<QPointF(3,4)<<QPointF(4,5)<<QPointF(5,6)<<QPointF(6,7)<<QPointF(7,8);
- curve->setSamples(points1);
- curve->attach( this );
- curve->setLegendAttribute(curve->LegendShowLine);//显示图例的标志,这里显示线的颜色。
- //曲线2的形状采用默认,即不单独设置画笔的颜色、样本点的显示
- QwtPlotCurve *curve2=new QwtPlotCurve("curve2");
- curve2->setSamples(points2);
- curve2->attach( this );
- curve2->setLegendAttribute(curve->LegendShowLine);
- //--------------设置图例可以被点击来确定是否显示曲线-----------------------//
- QwtLegend *legend = new QwtLegend;
- legend->setDefaultItemMode( QwtLegendData::Checkable );//图例可被点击
- insertLegend( legend, QwtPlot::RightLegend );
- connect( legend, SIGNAL( checked( const QVariant &, bool, int ) ),
- SLOT( showItem( const QVariant &, bool ) ) );//点击图例操作
- QwtPlotItemList items = itemList( QwtPlotItem::Rtti_PlotCurve );//获取画了多少条曲线,如果为获取其他形状,注意改变参数
- // qDebug()<<items;
- for ( int i = 0; i < items.size(); i++ )
- {
- if ( i == 0 )
- {
- const QVariant itemInfo = itemToInfo( items[i] );
- QwtLegendLabel *legendLabel =
- qobject_cast<QwtLegendLabel *>( legend->legendWidget( itemInfo ) );
- if ( legendLabel )
- legendLabel->setChecked( true );//
- items[i]->setVisible( true );
- }
- else
- {
- items[i]->setVisible( false );
- }
- }
- this->resize(600,400);
- this->replot();
- setAutoReplot( true );//设置自动重画,相当于更新
- }
- //点击图例,显示相应的曲线
- void PlotLines::showItem(const QVariant &itemInfo, bool on)
- {
- QwtPlotItem *plotItem = infoToItem( itemInfo );
- if ( plotItem )
- plotItem->setVisible( on );
- }
2、点击右上角的图例后:
原文:http://blog.csdn.net/tengweitw/article/details/41911035
转自:https://www.cnblogs.com/xiaomm/p/6326334.html
【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能的更多相关文章
- 【Qt编程】基于QWT的曲线绘制及图例显示操作
在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...
- 【Qt编程】QWT在QtCreator中的安装与使用
由于导师项目的需要,需要画图,二维+三维.三维图我用的是Qt+opengl,二维图我决定使用qwt工具库来加快我的项目进展,毕竟还有期末考试.关于Qt+opengl的使用有时间的话以后再介绍. ...
- QT下过多点的曲线绘制
绘制过多点的曲线意义重大.但通过试验,QT的PainterPath不是很如意.当多段曲线围成一个区域时,PainterPath内并不包含该区域的所有面积,只包含曲线和其弦构成的面积. 为了解决这一问题 ...
- Java 网络编程 -- 基于TCP 模拟多用户登录
Java TCP的基本操作参考前一篇:Java 网络编程 – 基于TCP实现文件上传 实现多用户操作之前先实现以下单用户操作,假设目前有一个用户: 账号:zs 密码:123 服务端: public c ...
- 基于canvas二次贝塞尔曲线绘制鲜花
canvas中二次贝塞尔曲线参数说明: cp1x:控制点1横坐标 cp1y:控制点1纵坐标 x: 结束点1横坐标 y:结束点1纵坐标 cp2x:控制点2横坐标 cp2y:控制点2纵坐标 z:结束点2横 ...
- 【Qt编程】基于Qt的词典开发系列<十>--国际音标的显示
在年前的一篇文章中,我提到要学习Qt.于是在这学期看了一个月的qt.现在大致对qt有了一些了解.但是现在导师又把我调到了android应用开发平台,所以说qt的学习要搁置了.本打算这学期做一个单词查询 ...
- Qt编译安装qwt错误moc/xxx Error:126
最近搞设计,需要在上位机上绘制曲线,在网上找了找,发现python的matplotlib和Qt的qwt都不错,本着难度最小原则,选择了Qt下面的qwt,安装过程中遇到了编译错误:moc/xxx Err ...
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- QT笔记(1)--QT编程环境搭建
一.QT简介 Qt 是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...
随机推荐
- SQLMAP之tamper详解
sqlmap 是一款注入神器广为人知,里面的 tamper 常常用来绕过 WAF ,很实用的模块,但是却常常被新手忽略(比如我),今天就整理总结一下 tamper 的用法以及 tamper 的编写 P ...
- Xcode 7.3 解决自定义类无法自动联想
正在苦拼的码友们,最近是不是觉得在写代码的时候很是头疼,甚至连个最基本的系统自带的语法啊.单词啊等等都不能联想了,之前习惯了的码友们,这个时候肯定会觉得是不是自己写错了,然后也往下翻了一大篇,还是找不 ...
- gradle使用基础
说明 介绍gradle使用基础,gradle基础脚本结构和常规使用方法,以及一个简单的gradle示例.主要是为了简单的介绍gradle使用. gradle环境配置 gradle可以通过两种方式运行g ...
- Docker安装并运行mysql5.6数据库
1.在/home目录下新建mysql目录 mysql目录中新建三个目录:conf目录.logs目录.data目录,建这些目录的目的是用来挂载docker中的mysql下的目录的. 结果如下: 1.1. ...
- Mysql8.0主从复制搭建,shardingsphere+springboot+mybatis读写分离
1.安装mysql8.0 首先需要在192.167.3.171上安装JDK. 下载mysql安装包,https://dev.mysql.com/downloads/,找到以下页面下载. 下载后放到li ...
- rocksdb和leveldb性能比较——写性能
前面学习了一下rocksdb,这个db是对leveldb的一个改进,是基于leveldb1.5的版本上的改进,而且leveldb1.5以后也在不断的优化,下面从写入性能对两者进行对比. 前言 比较的l ...
- SpringCloud学习笔记(七、SpringCloud Netflix Zuul)
目录: springcloud整合eureka.config.zuul zuul源码分析 springcloud整合eureka.config.zuul: 1.架构图 2.GitHub:https:/ ...
- 第七章 确保Web安全的HTTPS
第七章 确保Web安全的HTTPS 使用HTTPS通信机制可以有效防止信息窃听或身份伪装等安全问题. 1.HTTP缺点 [通信使用明文(不加密)]:内容容易被窃听. 加密处理防止被窃听.根据加密的对象 ...
- sublime3配置
1.sunblim3配置 一旦配置好了,如果换了一台电脑那直接将C:\Users\djx\AppData\Roaming\Sublime Text 3\Packages\User文件夹拷贝到新下载的s ...
- Mybatis主配置文件配置url报错:Cause: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 100; 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。
<property name="url" value="jdbc:mysql://localhost:3306/shop?characterEncoding=UTF ...