VC6.0中画图用的chart控件
- 格式:pdf
- 大小:330.90 KB
- 文档页数:6
详解CC++QTQChart绘制组件应⽤QtCharts 组件是QT中提供图表绘制的模块,该模块可以⽅便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核⼼是QChartView和QChart的⼆次封装版。
在使⽤绘图模块时需要在pro⽂件中包含QT += charts来引⼊绘图类库。
然后还需在头⽂件中定义QT_CHARTS_USE_NAMESPACE宏,这样才可以正常的使⽤绘图功能。
⼀般情况下我们会在mainwindows.h头⽂件中增加如下代码段。
#include <QMainWindow>#include <QtCharts>QT_CHARTS_USE_NAMESPACE// 解决MSVC编译时,界⾯汉字乱码的问题#if _MSC_VER >= 1600#pragma execution_character_set("utf-8")#endif由于QT中不存在单独的绘图画布,因此在绘图前我们需要在窗体中放⼊⼀个graphicsView组件。
并在该组件上右键将其提升为QChartView输⼊需要提升的组件名称,即可将该组件提升为全局绘图组件。
绘制折线图: 折线图的使⽤⾮常⼴泛,如下代码我们⾸先使⽤InitChart()将画布初始化,接着调⽤SetData()实现在画布中填充数据,完整代码如下。
#include "mainwindow.h"#include "ui_mainwindow.h"// 初始化Chart图表void MainWindow::InitChart(){// 创建图表的各个部件QChart *chart = new QChart();chart->setTitle("系统性能统计图");// 将Chart添加到ChartViewui->graphicsView->setChart(chart);// this->setCentralWidget( ui->graphicsView);ui->graphicsView->setRenderHint(QPainter::Antialiasing);// 设置图表主题⾊ui->graphicsView->chart()->setTheme(QChart::ChartTheme(0));// 创建曲线序列QLineSeries *series0 = new QLineSeries();QLineSeries *series1 = new QLineSeries();series0->setName("⼀分钟负载");series1->setName("五分钟负载");// 序列添加到图表chart->addSeries(series0);chart->addSeries(series1);// 其他附加参数series0->setPointsVisible(false); // 设置数据点可见series1->setPointLabelsVisible(false); // 设置数据点数值可见// 创建坐标轴QValueAxis *axisX = new QValueAxis; // X轴axisX->setRange(1, 100); // 设置坐标轴范围axisX->setTitleText("X轴标题"); // 标题axisX->setLabelFormat("%d %"); // 设置x轴格式axisX->setTickCount(3); // 设置刻度axisX->setMinorTickCount(3);QValueAxis *axisY = new QValueAxis; // Y轴axisY->setRange(0, 100); // Y轴范围(-1 - 20)axisY->setTitleText("Y轴标题"); // 标题// 设置X于Y轴数据集chart->setAxisX(axisX, series0); // 为序列设置坐标轴chart->setAxisY(axisY, series0);chart->setAxisX(axisX, series1); // 为序列设置坐标轴chart->setAxisY(axisY, series1);// 图例被点击后触发foreach (QLegendMarker* marker, chart->legend()->markers()){QObject::disconnect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked())); QObject::connect(marker, SIGNAL(clicked()), this, SLOT(on_LegendMarkerClicked())); }}// 为序列⽣成数据void MainWindow::SetData(){// 获取指针QLineSeries *series0=(QLineSeries *)ui->graphicsView->chart()->series().at(0);QLineSeries *series1=(QLineSeries *)ui->graphicsView->chart()->series().at(1);// 清空图例series0->clear();series1->clear();// 赋予数据qreal t=0,intv=1;for(int i=1;i<100;i++){series0->append(t,i); // 设置轴粒度以及数据series1->append(t,i+10); // 此处⽤随机数替代t+=intv; // X轴粒度}}// 将添加的widget控件件提升为QChartView类MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);InitChart();SetData();}MainWindow::~MainWindow(){delete ui;}// 图例点击后显⽰与隐藏线条void MainWindow::on_LegendMarkerClicked(){QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender());switch (marker->type()){case QLegendMarker::LegendMarkerTypeXY:{marker->series()->setVisible(!marker->series()->isVisible());marker->setVisible(true);qreal alpha = 1.0;if (!marker->series()->isVisible())alpha = 0.5;QColor color;QBrush brush = marker->labelBrush();color = brush.color();color.setAlphaF(alpha);brush.setColor(color);marker->setLabelBrush(brush);brush = marker->brush();color = brush.color();color.setAlphaF(alpha);brush.setColor(color);marker->setBrush(brush);QPen pen = marker->pen();color = pen.color();color.setAlphaF(alpha);pen.setColor(color);marker->setPen(pen);break;}default:break;}}效果如下所⽰:绘制饼状图: 饼状图⽤于统计数据的集的占⽤百分⽐,其绘制⽅式与折线图基本⼀致,代码如下。
TeeChart用于VC绘制曲线上网找了一个teechart8的Activex版本,在VC6下使用正常,感觉功能挺强大的,于是决定认真用一用,我是完全完全的新手,请高手们直接忽略我,或者给我提些好的建议。
我得到的是一个teechart8.ocx文件,这是Activex的文件,使用之前先注册一下,将该文件放入系统目录下,然后打开命令提示符,或者直接在运行窗口输入:regsvr32 T eeChart8.ocx,然后会有一个注册成功的提示框,说明我们的ActiveX控件注册成功,在VC6下就可以使用了。
如果不想使用了,可以使用regsvr32 -u TeeChart8.ocx 解除对teechart8的注册。
我的第一个任务是熟悉teechart控件。
首先新建一个基于MFC的exe工程,选择对话框,其他默认。
进入工程以后可以看到类视图中只有系统生成的默认的几个类,我先在类视图中在工程名上点右键新建两个文件夹,一个叫src,一个叫tee,然后把默认生成的几个类(dlg,app,about三个类)拖放到src文件夹中。
做这一步实际上没有什么实质的意义,只是为了看起开比较方便,因为一会儿添加了teechart8以后会有很多的类添加进来,看起来非常困难,所以先提前把他们分开。
闲话不多说,进入资源视图,点击主对话框后,删除todo那个静态文本。
下一步我们要在这个对话框上放置一个teechart图表,但是工具栏中没有,所以需要先添加一下。
依次点击工程-》增加到工程-》components and controls,进入对话框后选择register ed ActiveX controls,找到TeeChart Pro Activex control v8后点击insert,会弹出添加类的对话框,左边的列表里面是可以选择添加的类,现在我还不太了解具体类的作用,所以只好一并添加了,点击确定以后回到资源视图会发现工具栏下面多累一个圆形的小图标,这就是我们的teechart8控件了。
VC中使用TeeChart绘制实时曲线上网找了一个teechart8的Activex版本,在VC6下使用正常,感觉功能挺强大的,于是决定认真用一用,我是完全完全的新手,请高手们直接忽略我,或者给我提些好的建议。
我得到的是一个teechart8.ocx文件,这是Activex的文件,使用之前先注册一下,将该文件放入系统目录下,然后打开命令提示符,或者直接在运行窗口输入:regsvr32 T eeChart8.ocx,然后会有一个注册成功的提示框,说明我们的ActiveX控件注册成功,在VC6下就可以使用了。
如果不想使用了,可以使用regsvr32 -u TeeChart8.ocx 解除对teechart8的注册。
我的第一个任务是熟悉teechart控件。
首先新建一个基于MFC的exe工程,选择对话框,其他默认。
进入工程以后可以看到类视图中只有系统生成的默认的几个类,我先在类视图中在工程名上点右键新建两个文件夹,一个叫src,一个叫tee,然后把默认生成的几个类(dlg,app,about三个类)拖放到src文件夹中。
做这一步实际上没有什么实质的意义,只是为了看起开比较方便,因为一会儿添加了teechart8以后会有很多的类添加进来,看起来非常困难,所以先提前把他们分开。
闲话不多说,进入资源视图,点击主对话框后,删除todo那个静态文本。
下一步我们要在这个对话框上放置一个teechart图表,但是工具栏中没有,所以需要先添加一下。
依次点击工程-》增加到工程-》components and controls,进入对话框后选择register ed ActiveX controls,找到TeeChart Pro Activex control v8后点击insert,会弹出添加类的对话框,左边的列表里面是可以选择添加的类,现在我还不太了解具体类的作用,所以只好一并添加了,点击确定以后回到资源视图会发现工具栏下面多累一个圆形的小图标,这就是我们的teechart8控件了。
VC6中调用 ProEssentials v5图表组件实现科学图表绘制1 ProEssentials v5简介:ProEssentials v5是应用于windows 服务器端和客户端开发的一系列图表组件,它是对绘制图表以及图表分析功能所需要的数据和方法的简单封装。
可以提供Winforms、Webforms、ActiveX、VCL和DLL五种界面。
它的图表类型很多,包括:一般图表、科学图表、3维图表、极坐标图表、饼状图表,几乎覆盖了所有常见的图表类型。
我们可以很方便的调用ProEssentials v5的函数库,添加绘制图表的功能,并可以对图表进行分析,如:回归,求最大值,拟合曲线等。
我们还可以很方便的将图表文件的数据文件进行保存,或者导出我们希望格式的图片,如bmp、jpg、png。
注:一般图表与科学图表之间的区别在于,一般图表仅提供一维坐标数据绘图,而另一维坐标数据是等间距的。
科学图表提供二维坐标数据,绘制任意的散点数据。
2 具体应用方法:(1)无论开发的是OCX的应用程序、DLL的应用程序还是VCL的应用程序,首先要做的就是根据开发环境的操作系统类型,拷贝PEGRP32C.DLL到相应的在本地硬盘系统盘中去。
如果是win95或者win98操作系统,拷贝PEGRP32C.DLL到System 目录下;如果是win2000操作系统,拷贝PEGRP32C.DLL到System32目录下。
PEGRAPHS.HLP文件是可选的(2)工程里面添加头文件Pegrpapi.h。
选择需要调用的函数,完成图表的绘制功能。
在此简介,ProEssentials v5函数和变量的命名规则。
以PEP_为前缀的变量类型如下:PEP_b Boolean (4 bytes)PEP_n Integer (4 bytes)PEP_dw Double Word (4 bytes)PEP_sz Null Terminated array of characters.PEP_f Single (4 bytes) or Double (8 bytes) floating point.PEP_na Array of Integer (4 bytes)PEP_dwa Array of Double Word (4 bytes)PEP_sza Array of Null Terminated strings.PEP_fa Array of Single (4 bytes) or Double (8 bytes) floating point. PEP_struct Various structures要用DLL调用来设定获取以上变量类型的值,可以根据以上变量类型的前缀来判断应该:PEP_b PEnset / PEngetPEP_n PEnset / PEngetPEP_dw PElset / PElget (16 bit) PEnset / PEnget (32 bit)PEP_sz PEszset / PEszget.PEP_f PEvset / PEvgetPEP_na PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell,PEvgetcellExPEP_dwa PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell,PEvgetcellExPEP_sza PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell,PEvgetcellExPEP_fa PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell,PEvgetcellExPEP_struct PEvset, / Pevget(3)选择适当的变量,将数据赋予这些变量。
用Chart控件绘制动态图表---- 进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量。
ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用。
本文仅以VC++为例说明Chart控件的使用。
---- Chart控件指Mschart.ocx(5.0版)或Mschrt20.ocx(6.0 版),是Visual Studio自带的ActiveX控件之一,其属性、事件很多,功能非常强大,可实现柱状直方图、曲线走势图、饼状比例图等,甚至可以是混合图表,可以是二维或三维图表,可以带或不带坐标系,可以自由配置各条目的颜色、字体等等。
一安装和使用Chart控件----在用到Chart控件的项目中安装该控件:从Project->Add to Project ->Components And Controls->Registered Active Xcontrols,选择Chart控件,则ClassWizard会生成相应的C++类,其中类CMSChart是由CWnd派生来的,它是Chart 控件的主要类,其他的类全部是由COleDispatchDriver派生来,控制控件中的相应对象,完成各部分相关功能,如CvcAxis类是实现坐标轴相关功能的源代码。
同时在项目的控件工具箱上会出现代表Chart控件的按钮,使用时把Chart控件按钮从工具箱拖到对话框中,调整大小即可。
----Chart控件至少有45个属性、9个方法、49个事件,在这里就不一一列举了。
---- 在设计中,我们可以在主要属性页里修改各属性的属性值:右击对话框窗口中的Chart控件,选择“Properties”菜单项,就会弹出主要属性页对话框,对其中各属性值进行设置。
有些属性在主要属性页里没有列出,只能编程修改。
另外要动态绘制图表,必须掌握对控件的编程控制。
---- 首先在对话框类中定义控件变量,以便编程时操纵控件。
C# 中使用MSChart 组件
2013/03/17 0 这两天在研究怎样在C# 中使用MSChart 组件来绘制柱状、饼状图形,由于以前没有接触过MSChart 组件,关于这方面的资料也没有;于是就到
网上狂搜一把,找到了一些相关的资料,但资料都写的不完整;现在将自己摸索的
心得整理一下:
1、将MSChart control 的引用添加到工具栏。
选择“工具- 选择工具箱项”,然后切换到“COM组件”页,选择“Microsoft Chart Control 6.0 (OLEBD)”,点击确定后就可以成功加载控件了。
2、添加引用,using MSChart20Lib;
3、定义图表样式
//图表标题
MSChartBar.TitleText = 年度统计图表
//页底说明
MSChartBar.Footnote.Text = 说明:年度柱状统计图表
//设置图例
MSChartBar.ShowLegend = true;
MSChartBar.Legend.Location.LocationType = VtChLocationType.VtChLocationTypeRight;
//设置Plot 的Shadow
MSChartBar.Plot.Backdrop.Shadow.Style = VtShadowStyle.VtShadowStyleDrop; //设置Shadow 的大小
MSChartBar.Plot.Backdrop.Shadow.Offset.Set(60, 60);。
本文为DataGrid控件在VC6.0中使用的基本范例,主要功能为插入一行数据并在控件中显示,及删除一行数据并在控件中显示。
1 在VC6.0中建立MFCApp(exe)工程;2 导入DataGrid控件:路径:Project-->Add To Project-->Conponents and Controls选择集合:选择组件,选好后别忘记“Insert”:演示目前的功能仅需要选择图片中的三个类就可以了:这时组件就被导入到工具箱中了,在Form中画好后再为其添加一个控件变量m_ctrlDataGrid1;3 实现数据绑定:对于数据库的操作,我在这里使用了ADO来执行;要使用ADO的话不要忘记在你的stdafx.h中将其导入:#import "c:/program files/common files/system/ado/msado15.dll"我使用的是SQLSERVER2005 EXPRESS,也就是附带在VS2005中的开发版本,数据库连接字符串的设置如下:CString strSqlLink = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=SalManSystem;Data Source=.//SQLEXPRESS";注意:Data Source的设置对比2005之前版本的设置略有不同;对话框初始化时的数据绑定代码:BOOL CTestDATAGRIDDlg::OnInitDialog(){//................以上省略若干行// TODO: Add extra initialization hereCString strConnection;strConnection.Format(_T(sqllink));m_ADODb.Open((LPCTSTR)strConnection); //打开程序数据库m_Rs.SetDatabase(&m_DBCn);m_Rs.Open(_T("select * from em_baseinfo;"));m_ctrlDataGrid1.SetCaption(_T("Add Employeer")); //设置标题m_ctrlDataGrid1.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset( )); //绑定数据源return TRUE; // return TRUE unless you set the focus to a control}4 插入操作:这个非常简单,代码如下:BOOL CTestDATAGRIDDlg::InsertEMInfo(){CString strSQL;strSQL.Format( _T("INSERT INTO em_baseinfo(em_name, em_id, em_s ex, em_edu)VALUES('%s', '%s', '%s', '%s');"), m_strName, m_strID, m_strSex, m_strEDU );m_Rs.Open((LPCTSTR)strSQL);m_Rs.Open(_T("select * from em_baseinfo;"));m_ctrlDataGrid1.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset( ));}5 删除操作:这个需要稍微花点心思。
MFC中MSChart的使用示例最近由于工作的原因,接触了一些MSChart的东西。
在查看的资料的时候发现,网上很多资料是关于在VB和C#中利用MSChart实现图表的绘制,但关于在MFC中利用MSChart 实现图表绘制的资料甚少,因此在做的过程中遇到了很多问题,下面对MFC中使用MSChart 进行简单的小结:1.添加MSChart点击VS中的“工具-选择工具箱-COM组件”,找到Microsoft Chart Control,version 6.0(OLEDB)并勾选(注:如果COM组件中不存在该项,便可自行安装,从网上下载MSChart.exe 和MSCHART20.OCX。
首先安装MSChart.exe,然后注册MSCHART20.OCX,如果是win7下要用管理方式运行注册,方可成功)。
如下所示:2.在对话框中添加MSChart控件这个比较简单,在此不再赘述,如下所示:3.属性设置MSChart控件的属性及说明如下,可根据需要自行设置。
ChartAreas:增加多个绘图区域,每个绘图区域包含独立的图表组、数据源,用于多个图表类型在一个绘图区不兼容时。
AlignmentOrientation:图表区对齐方向,定义两个绘图区域间的对齐方式。
AlignmentStyle:图表区对齐类型,定义图表间用以对其的元素。
AlignWithChartArea:参照对齐的绘图区名称。
InnerPlotPosition:图表在绘图区内的位置属性。
Auto:是否自动对齐。
Height:图表在绘图区内的高度(百分比,取值在0-100 )Width:图表在绘图区内的宽度(百分比,取值在0-100 )X,Y:图表在绘图区内左上角坐标Position:绘图区位置属性,同InnerPlotPosition。
Name:绘图区名称。
Axis:坐标轴集合Title:坐标轴标题TitleAlignment:坐标轴标题对齐方式Interval:轴刻度间隔大小IntervalOffset:轴刻度偏移量大小MinorGrid:次要辅助线MinorTickMark:次要刻度线MajorGrid:主要辅助线MajorTickMark:主要刻度线DataSourceID:MSChart的数据源。
因工作需求,要用到TeeChart控件,发现TeeChart在MFC下的资料很少。
以下一些TeeChart的用法,大多是从网上七拼八凑得到的,还有一些是我自己摸索的,以下代码经均本人测试,测试环境vc++6.0。
TeeChart的安装方法网上有很多,这里不再赘述。
把TeeChart控件添加到工程中后,将其拖到对话框中,然后通过ClassWizard定义一个类变量m_TeeChart。
TeeChart简介:TeeChart的主类是TChart,TChart类存在众多的属性方法和事件,下面介绍一些主要的属性。
1、 TChart.Height:图表的高度;可用下列语句获取或设置图表的高度1 m_TeeChart.SetHeight(100); //设置图表高度为1002long Height_size = m_TeeChart.GetHeight(); //获取当前图表的高度2、TChart.Width:图表的宽度;用法与高度一致,就不在赘述3、TChart.Header:图表的标题;图表可以拥有多级标题,可用下列语句设置图表的标题以及追加标题1 m_TeeChart.GetHeader().GetText()2 .SetItem(0, COleVariant(“TeeChart 使用范例”));3 m_TeeChart.GetHeader().GetText().Add(COleVariant(“追加的标题”));4、TChart.Series:序列;Series是要显示的数据的主体,在一个图表中可以有一个或者多个序列,每一个序列可以有不同的显示类型,例如Line、Bar、Pic等等,稍后将单独描述。
5、TChart.Axis:坐标轴;用来设置坐标轴的属性1 m_TeeChart.GetAxis().GetBottom().GetTitle().SetCaption("X轴的标题");2// 设置X轴的标题,准确的说应该是设置底部轴的标题3 m_TeeChart.GetAxis().GetLeft().GetTitle().SetCaption("Y轴的标题");4// 设置左侧轴的标题5 m_TeeChart.GetAxis().GetBottom().SetMinMax(0, 100);6//设置X轴的范围6、TChart.Legend:图例,图例就是下图中右侧的部分下列语句可以将图列隐藏1 m_TeeChart.GetLegend().SetVisible(FALSE); //隐藏图例画图需要添加序列,添加序列有两种方式。