关于qt 绘图 曲线问题

您所在的位置: &
学习 QT 绘制图形 从这里开始(1)
学习 QT 绘制图形 从这里开始(1)
本文介绍的是学习 QT 绘制图形 从这里开始,关于QT绘图的更多内容,请参考文章末尾,先来看内容。
学习 QT 绘制图形 从这里开始是本文呢介绍的内容,不多说了,先来看内容。说明:以后使用的环境为基于Qt 4.6的Qt Creator 1.3.0 windows版本
本文介绍在窗口上绘制最简单的图形的方法。
1、新建Qt4 Gui Application工程,我这里使用的工程名为painter01,选用QDialog作为Base class
2、在dialog.h文件中声明重绘事件函数void paintEvent(QPaintEvent *);
3、在dialog.cpp中添加绘图类QPainter的头文件包含#include &QPainter&
4、在下面进行该函数的重定义。
void&Dialog::paintEvent(QPaintEvent&*) &{ &QPainter&painter(this); &painter.drawLine(0,0,100,100); &}&
其中创建了QPainter类对象,它是用来进行绘制图形的,我们这里画了一条线Line,其中的参数为线的起点(0,0),和终点 (100,100)。这里的数值指的是像素,详细的坐标设置我们以后再讲,这里知道(0,0)点指的是窗口的左上角即可。运行效果如下:
5、在qt的帮助里可以查看所有的绘制函数,而且下面还给出了相关的例子。
6、我们下面将几个知识点说明一下,帮助大家更快入门。
将函数改为如下:
void&Dialog::paintEvent(QPaintEvent&*) &{ &QPainter&painter(this); &&&&&QPen&&//画笔 &pen.setColor(QColor(255,0,0)); &QBrush&brush(QColor(0,255,0,125));&//画刷 &&&&&&painter.setPen(pen);&//添加画笔 &painter.setBrush(brush);&//添加画刷 &painter.drawRect(100,100,200,200);&//绘制矩形 &}&
这里的pen用来绘制边框,brush用来进行封闭区域的填充,QColor类用来提供颜色,我们这里使用了rgb方法来生成颜色,即 (red,green,blue),它们取值分别是0-255,例如(255,0,0)表示红色,而全0表示黑色,全255表示白色。后面的 (0,255,0,125),其中的125是透明度(alpha)设置,其值也是从0到255,0表示全透明。最后将画笔和 画刷添加到painter绘制设备中,画出图形。这里的Rect是长方形,其中的参数为(100,100)表示起始坐标,200,200表示长和宽。效果 如下:
内容导航&第 1 页: &第 2 页:
关于&&&&的更多文章
移动异构计算是相对于同构计算来说的,同构计算就是使用同一个处
既然强大的Android Studio来了,有什么理由不去用呢?
在Android开发中,优化,是一直困扰开发者的一个难题
在百年老店诺基亚和我们依依惜别之后,上周我们又迎来
大家都知道iOS的发展之迅速,这对于开发者来说,无疑
本书使用通俗易懂的语言,通过大量的实例,从实际应用的角度出发,全面系统地介绍了网络服务操作系统平台、电子邮件系统、Web站
Windows Phone专家
Android开发专家
51CTO旗下网站新人求教关于Qt绘图问题。。。解决问题有追加_百度知道
需要在pro文件中增加widgets支持。qt+=widgets 同时头文件包含qwidgets。qmake后编译就应该好了
现在知道似乎是构造函数出现了问题,qframe类的构造函数第二个参数是Qt::windowflags f,想问下初始化f应该怎么写,例如frame = new QFrame( this,? ),希望显示frame这个字符的
其他类似问题
为您推荐:
解决问题的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Qwt是一个基于LGPL版权协议的开源项目, 其目标是提供一组2D的窗体库显示技术领域的数据, 数据源以浮点数组或范围的方式提供,
输出方式可以是Curves(曲线),Slider(滚动条), Dials(圆盘), compasses(仪表盘)等等。 该工具库基于Qt开发,
所以也继承了Qt的跨平台特性, 据原作者文档所说, 该项目在Qt-win/Qt-x11/Qt-embedded(qvfb环境)上都测试过,
运行正常。 项目的主页在:http://qwt.sourceforge.net/
在网上搜了一下, 发现关于qwt的中文资料实在很少, 基本上只有关于编译和安装的文章。 实际上经过笔者实践,
Qwt的编译和运行实在乏善可陈,make就可以搞定, 没什么可memo的东西, 所以这篇文章将以扫盲为主,
介绍Qwt的feature。
当然按照正常的顺序, 我们还是从编译安装开始。 从svn服务器上下载最新代码:svn co https://qwt.svn.sourceforge.net/svnroot/qwt/trunk/qwt[喝小酒的网摘]/a/10273.htm
进入qwt目录, 运行你电脑上qt4对应的qmake, 再运行make编译。如笔者环境中是
$ export PATH=/usr/local/Trolltech/Qt-4.5.1/bin/:$PATH
编译要花个几分钟的时间。 成功后在lib下会生成 libqwt.so*文件, 并且examples也参与编译, 生成的binary在examples/bin下, 我们可以运行这些例子初步查看qwt的功能。
$export LD_LIBRARY_PATH=$PWD/lib
$cd examples/bin
$ ./simple
simple是qwt自带的例子中最简单的一个, 一共只有一百来行的代码, 实现了数学中的正弦函数(sin())和余弦函数(cos())曲线。 如下图:
这个例子里用到的核心类有四个(以下内容是笔者的理解, 有可能有不对的地方, 请酌情阅读):
类似一个2D绘图的容器, 里面可以放其他的QwtPlotItem派生类对象, 比如本例子中使用的QwtPlotMarker等。(有点类似Qt里的graphicsview的感觉。) 这个类负责控制绘图数据的产生和传递, 并且绘制一个坐标轴。
QwtPlotMarker
标尺类, 用于绘制刻度线。
QwtPlotCurve
曲线类, 用于绘制各种曲线。
QwtSyntheticPointData
比较奇怪, 这是个undocumented的类, 估计不小心被作者遗漏了, 文档中没有提供该类的说明, 只能从源码中寻找答案了,
这一点很让人郁闷。 通过看code当中的注释和例子代码, 笔者的理解是该类负责产生数据, 它的作用是提供固定数量的浮点数的点,
点的数量在构造类时传入。 获取数据时QwtPlotCurve类会调用该类的y()方法获取纵坐标。
程序的基本流程是:
1、初始化绘图容器, 设置坐标轴的参数
// Set axes
setAxisTitle(xBottom, &x &&&);
setAxisScale(xBottom, 0.0, 10.0);//横坐标从0到10, xBottom表示横坐标的方向从下往上
setAxisTitle(yLeft, &y &&&);
setAxisScale(yLeft, -1.0, 1.0); //纵坐标-1到1,yLeft表示纵坐标的方向从左到右
2、添加正弦余弦曲线
// Insert new curves
QwtPlotCurve *cSin = new QwtPlotCurve(&y = sin(x)&);
#if QT_VERSION &= 0&040000
cSin-&setRenderHint(QwtPlotItem::RenderAntialiased);
cSin-&setPen(QPen(Qt::red));//红色曲线
cSin-&attach(this);
QwtPlotCurve *cCos = new QwtPlotCurve(&y = cos(x)&);
#if QT_VERSION &= 0&040000
cCos-&setRenderHint(QwtPlotItem::RenderAntialiased);
cCos-&setPen(QPen(Qt::blue));//蓝色曲线
cCos-&attach(this);
3、设置曲线的数据内容
// Create sin and cos data
cSin-&setData(FunctionData(::sin));
cCos-&setData(FunctionData(::cos));
4、添加横纵标尺线作为坐标的参照
// Insert markers
// &a horizontal line at y = 0&
QwtPlotMarker *mY = new QwtPlotMarker();
mY-&setLabel(QString::fromLatin1(&y = 0&P));
mY-&setLabelAlignment(Qt::AlignRight|Qt::AlignTop);
mY-&setLineStyle(QwtPlotMarker::HLine);//线的方向
mY-&setYValue(0.0);//标尺线画在y=0的位置
mY-&attach(this);
// &a vertical line at x = 2 * pi
QwtPlotMarker *mX = new QwtPlotMarker();
mX-&setLabel(QString::fromLatin1(&x = 2 pi&));
mX-&setLabelAlignment(Qt::AlignLeft | Qt::AlignBottom);
mX-&setLabelOrientation(Qt::Vertical);
mX-&setLineStyle(QwtPlotMarker::VLine);
mX-&setLinePen(QPen(Qt::black, 0, Qt::DashDotLine));
mX-&setXValue(2.0 * M_PI);//该标线画在x=2PI的位置
mX-&attach(this);
同样的功能如果用Qt来写的话需要写大量的绘图代码, 比较麻烦, 但使用Qwt的封装库代码更OO且更容易理解和维护。 在这个例子中使用Qwt的优势体现得可能还不太明显, 相比而言复杂一些的图表更能体现Qwt的优越性。 再来几个例子的截图:
原文:/qinpanke/blog/item/ad9bb5fcf2ad7f1f08244d72.html[喝小酒的网摘]/a/10273.htm
需要#include &QSettings&
只举几个简单的例子:
1、用QSettings写注册表
QSettings *reg = new QSettings(&HKEY_CURRENT_USER\Software\yinhaifan&,
QSettings::Nati
QaxContainer模块是访问ActiveX控件和COM对象的一个Windows扩展。
QAxContainer模块是ActiveQt构架的一部分。它提供一个库,由担当ActiveX控件容器角色的QWidget的子类QAxWidget 和 用来简化访问非可视化COM对象的QObject的子类QAxWidget 实现。通过类QAxScript, QAxScriptManager&
1. 何为Qt样式表
2. 样式表语法基础
3. 方箱模型
4. 前景与背景
5. 创建可缩放样式
6. 控制大小
7. 处理伪状态
8. 使用子部件定义微观样式
8.1. 相对定位
8.2. 绝对定位
用qt读取XML文档,出现中文乱码的问题,因为qt的默认是utf8,所有在存储的时候注意以utf8来存储就可以,我在源程序是这样取得XML内容的:
QFile file(&a.xml&);
QDomDocument doc(&xml&);
if(!file.open(IO_ReadOnly)){
QMessageBox::info
Qt有三种方式读取并解析XML文档,同样有三种方式写XML,不过在下还是喜欢标准,所以使用DOM方式来解析和保存XML文档
首先是读取XML
QFile file(fileName);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
IP:221.223.55.225:qwt 函数绘图IP:121.249.1.103:Qt的QWT控件的使用IP:180.172.48.213:qwt控件画图IP:211.143.125.54:111.11.98.21IP:218.241.186.225:qt 绘图 例子IP:220.181.51.137:bkyuillvdIP:114.96.140.22:Qwt 绘图标签放入框内IP:222.67.142.155:在Qt中使用sinIP:223.199.15.92:qwt动态曲线IP:220.181.51.147:eymhgigzIP:60.208.82.98:Qwt 动态曲线更新速度IP:120.194.16.102:QT QWT在控件中绘图IP:220.181.51.145:tuwdamnqwnIP:60.208.82.98:qwt 动态曲线移动方向IP:222.168.37.209:qwt 动态绘制IP:114.32.47.18:qt sin cos使用IP:171.8.182.154:qwt compassIP:220.181.51.136:vxgsqnoysuIP:123.114.106.135:qwtplot 动态绘图IP:171.221.107.127:qwt 监控IP:183.47.202.157:QT中类似chart的控件IP:120.128.2.166:qwt 圆圈IP:111.11.98.21:qt 流量监控IP:219.226.91.175:QWT 中文乱码IP:218.19.216.194:QWT 表IP:118.113.219.131:qt 流量监控qwtIP:218.7.49.19:qwt绘制任意曲线IP:113.96.97.217:qwt 应用IP:183.2.50.243:QWt绘制动态曲线IP:111.172.56.170:曲线控件测试程序 qwtIBM Bluemix
点击按钮,开始云上的开发!
developerWorks 社区
Qt 是一个跨平台的 C++ 图形用户界面库,由挪威 TrollTech 公司出品,目前包括Qt, 基于 Framebuffer 的 Qt Embedded,快速开发工具 Qt Designer,国际化工具 Qt Linguist 等部分 Qt 支持所有 Unix 系统,当然也包括 Linux,还支持 WinNT/Win2k,Win95/98 平台。
(), 自由撰稿人
于明俭。自由撰稿人及 Linux
developer。个人主页:/~yumingjian。 如想作者探讨
Qt 编程,请
Trolltech 公司在 1994 年成立,但是在 1992 年,成立
Trolltech 公司的那批程序员 就已经开始设计 Qt 了,Qt
的第一个商业版本于 1995 年推出然后 Qt 的发展就很快了,下面是 Qt
发展史上的一 些里程碑:1996 Oct KDE 组织成立1998 Apr 05 Trolltech 的程序员在 5 天之内将 Netscape5.0 从
Motif 移植到 Qt 上1998 Apr 08 KDE Free Qt 基金会成立1998 Jul 09 Qt 1.40 发布1998 Jul 12 KDE 1.0 发布1999 Mar 04 QPL 1.0 发布1999 Mar 12 Qt 1.44 发布1999 Jun 25 Qt 2.0 发布1999 Sep 13 KDE 1.1.2 发布2000 Mar 20 嵌入式 Qt 发布2000 Sep 06 Qt 2.2 发布2000 Oct 05 Qt 2.2.1 发布2000 Oct 30 Qt/Embedded 开始使用 GPL 宣言2000 Sep 04 Qt free edition 开始使用 GPL基本上,Qt 同 X Window 上的 Motif,Openwin,GTK
等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL
是同类型的东西,但是 Qt 具有下列优点:优良的跨平台特性:
Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows
NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1,
Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX
Qt 的良好封装机制使得 Qt
的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。
Qt 提供了一种称为 signals/slots 的安全类型来替代
callback,这使得各个元件 之间的协同工作变得十分简单。
丰富的 API
Qt 包括多达 250 个以上的 C++ 类,还替供基于模板的 collections,
serialization, file, I/O device, directory management,
date/time 类。甚至还包括正则表达式的处理 功能。支持 2D/3D 图形渲染,支持 OpenGL大量的开发文档XML 支持但是真正使得 Qt 在自由软件界的众多 Widgets (如
Lesstif,Gtk,EZWGL,Xforms,fltk 等等)中脱颖而出的还是基于 Qt
的重量级软件 KDE 。 有趣的是,KDE 也是使得 Trolltech
公司承受巨大压力的一个原因。下面我们将来看看这场 著名的自由软件圣战
-- "KDE/QT .VS. Gnome/Gtk" 是怎么发生的。在 Unix 的图形界面一向是以 MIT 的 X Window
系统为标准, 可是在商业应用上有两大流派,一派是以 Sun 公司领导的
Openlook 阵营,一派是 IBM/HP 领导的OSF (Open Software Foundation)
的 Motif, 双方经过多年竞争之后, Motif 最终
胜出,成为最普遍使用的界面库, 后来双方又妥协出一个 CDE(Common
Desktop Enviroment) 作为一个标准的图形界面。 但是 Motif/CDER
的价格非常昂贵,在这同时微软的 Windows 图 形界面发展速度非常快,而
Unix 界的后起之秀 Linux 也急需一个可靠并且免费的图形界面。1996 年 10 月,由开发图形排版工具Lyx的德国人
Matthias Ettrich 发起了 KDE 计划。 KDE 的全称为 K Desktop
Environment,可以看出是针对 CDE。 KDE 本身 是采用 GPL 宣言的,但是
KDE 却是使用 Qt 来作为其底层库,因为当时 Qt 已经将其 Unix 版
本自由发布了,但是 Qt 并不遵循 GPL, 因此 KDE
被很多自由软件的作者攻击,认为利用非自 由软件开发违背了 GPL
的精神,于是 GNU 的狂热信徒兵分两路,一路是去制作 Harmonny,试
图重写一套兼容于 Qt 的替代品,另一路是由一个 26 岁的墨西哥程序员
Miguel De Icaza 领导 下重新开发一套叫 GNOME(GNU Network Object
Enviroment)来替代 KDE。由于 Linux 界的老大 RedHat 不喜欢 KDE/Qt
的版权,因此 RedHat 甚至专门派出了几个全职程序员来加入 GNOME
进行开发工作,于是一场同 Motif VS Openlook 相
似的圣战就这么打起来了。 Trolltech 为了 KDE 曾数次修改 Qt
的版权,从成立 KDE Free Qt 基 金会到采用 QPL,可谓是费尽心机,但是
GNOME 采用的 GTK 一开始就是完全的 GPL,因此在这个方 面 GNOME
有一定的优势,加上 Qt/KDE 采用 C++ 开发,入门的门槛比较高,而
GTK/Gnome 采用 C, 因此 GNOME 吸引了更多的自由软件开发者,但是 KDE
毕竟先走了一步, 推出的 KDE1.1.2 十分稳定, 而当时急忙中推出的
GNOME1.0 的系统稳定性奇差,有人甚至笑称 GNOME1.0 还没有 KDE 1.0
Alpha 稳定。但是 GNOME 后来发展比较快,大有迎头赶上的势头。
当时双方的开发者在网络 上炒得天翻地覆,连 Linux 之父 Linus
只是说了一句喜欢用 KDE 都倍受指责。
战争到了第三个年头,也就是2000年,可谓是风云突变,一个接
一个重大的事件先后发生: 首先是一批从 Apple
公司出来的工程师成立了一个叫 Eazel 的公司替 GNOME
设计界面,然后是一批 GNOME 程序员成立了一个 Helix Code 公司替 GNOME
提供商业支持,而大家期待以久的 KDE 2.0
也终于发布了,这恐怕是目前最为庞大的自由 软件了之一, 除了 KDE
本身,还包括 Koffice 套件,和集成开发环境 Kdevelop 等等大批软件,其
主力软件 Kounqueror 也是第一个可以同微软的 Internet Exploer
相抗衡的浏览器。 而 Sun 公司,Red Hat 公司, Eazel 公司,Helix Code
等一批公司成立了一个GNOME 基金会, Sun 还宣布将把重量级办公软件
Star office 同 GNOME 集成, Trolltech 公司自然不能坐以 待毙,于今年
10 月 4 日将 Qt 的 free edition 变为 GPL 宣言,彻底解决了 KDE
的版权问题, 又推出了嵌入式 Qt ,给了 GNOME
阵营一个有力的回击。到现在为止,这场战争还在继续,
相信我们不能很快看到结果。一般说来, 目前 GNOME
吸引的公司比较多,但是 KDE/Qt 的开发的效率和质量比 GNOME 高,而且在
Office/嵌入式 环境中先走一步,在一定时间内还将处于优势地位。那么对于用户来说,如何在 Qt/GTK
中作出选择呢?一般来说,如果用户使用
C++,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用
Qt 是较好的选择, 但是值得注意的是,虽然 Qt 的 Free Edition 采用了
GPL 宣言,但是如果你开发 Windows 上的 Qt 软件或者是 Unix
上的商业软件,还是需要向 Trolltech 公司支付版权费用的。关于 Qt
的一些编程技巧将陆续在以后的文章中介绍。
参考资料 Qt 网上资源以下列出 Qt,Gnome 相关的重要资源:
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
IBM PureSystems(TM) 系列解决方案是一个专家集成系统
通过学习路线图系统掌握软件开发技能
软件下载、试用版及云计算
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=LinuxArticleID=52775ArticleTitle=Qt 简介publish-date=

我要回帖

更多关于 qt 绘图控件 的文章

 

随机推荐