1、使用Ubuntu的Software Center安装Qt creator;
2、下载Qwt6.0,http://sourceforge.net/projects/qwt/;并将其存放到/opt/下面;
3、按照User Guide的说明安装Qwt6.0,http://qwt.sourceforge.net/qwtinstall.html;安装完成后会在/usr/local/下面生成qwt-6.0.x文件夹;
4、将/usr/local/plugins/designer/libqwt_designer_plugin.so拷贝到/usr/share/qt4/plugins/designer/下面;
5、将qwt的共享库连接到/usr/local/lib下面,如对libqwt.so.6执行sudo ln -s /usr/local/qwt-6.0.x/lib/libqwt.so.6 /usr/local/lib/libqwt.so.6;
6、执行sudo ldconfig,以重新装载动态库;此时,在qt designer下面已经可以看到qwt的控件了;
7、接着,将/usr/local/qwt-6.0.x/include/下面的头文件拷贝到/usr/local/include/下面就可以在creator下面使用qwt了。
C++ GUI 绘图控件目录
MFC(VC)
VS2010 使用TeeChart绘图控件 - 之一 - 控件和类的导入
VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图)
TeeChart绘图控件 - 之三 - 提高绘图的效率
MFC下好用的高速绘图控件-(Hight-Speed Charting)
绘制动态曲线
Qt
qt超强精美绘图控件 - QCustomPlot一览
qt超强绘图控件qwt - 安装及配置
对于任何绘图控件,都可以实现动态绘图,其原则是:控件只负责绘图,若想曲线动,就让数据动,就像看电影一样,电影是由一帧一帧的静态图片组合起来的,在一定速度上刷新,静态图片就能动起来;和电影的原理一样,绘图控件能显示静态的曲线,想要它动起来,就让它频在一定时间刷新就可以了。
这就是动态绘图的实现原理。
实现动态曲线需要以下两个准备:
计时器Timer
数组左移
基于Timer的绘图
任何界面库都会有Timer这个实现,在MFC中时OnTimer消息,在Qt中是QTimer类,那种原理基本都一样,下面将以MFC(VC)为例进行说明。
Timer是消息级别最低的消息,它会保证其它级别高的消息优先执行,因此,就算数据大量刷新,也不会影响主线程的其它消息。
MFC生成OnTimer消息,消息响应函数如下:
[cpp] view plaincopyvoid CTeeChartDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码或调用默认值
CDialogEx::OnTimer(nIDEvent)
}
绘图的实现就在这个消息响应函数里
如果让定时器设定为1秒触发,每一秒把旧数据去除,绘制新数据,就能看到不停变换的波形;对于趋势图,假如每秒有一个新数据,那么就在定长数组中,把数组所有数据整体左移,同时数组末端加入新数据。代码如下:
[cpp] view plaincopy///
/// \brief 左移数组
/// \param ptr 数组指针
/// \param data 新数值
///
void LeftMoveArray(double* ptr,size_t length,double data)
{
for (size_t i=1i<length++i)
{
ptr[i-1] = ptr[i]
}
ptr[length-1] = data
}
此函数把整个数组左移,然后新数据放置在数组最末端(右端)。
这样,数组就实现“向左运动”,把左移后的数组绘制,就能在绘图控件上发现其变化。
下面开始实现动态绘图(这里演示TeeChart的方法,附件里有HightSpeed-Chart CChartCtrl的方法):
[cpp] view plaincopyvoid CTeeChartDlg::OnBnClickedButtonRuning()
{
KillTimer(0)
ZeroMemory(&m_TeeChartArray,sizeof(double)*m_c_arrayLength)
for (size_t i=0i<m_c_arrayLength++i)
{
m_X[i] = i
}
m_count = m_c_arrayLength
CSeries chart_T = (CSeries)m_Chart.Series(0)
chart_T.Clear()
m_pLineSerie->ClearSerie()
SetTimer(0,1000,NULL)
}
函数中几个成员变量的定义是:
[cpp] view plaincopydouble m_TeeChartArray[2096]
double m_X[2096]
unsigned int m_count
const size_t m_c_arrayLength = 2096
m_TeeChartArray是需要绘制的数组的Y值,m_X是对应的x值,m_count是计数器,每绘制一次,个数加1,主要用于x轴
在timer中的实现如下:
void CTeeChartDlg::OnTimer(UINT_PTR nIDEvent){
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(0 == nIDEvent)
{
++m_count
drawMoving()
}
CDialogEx::OnTimer(nIDEvent)
}
QWT6.1.2支持Qt4和Qt5。
1.编译QWT6.1.2
源码下载链接:
解压后,进入源码目录,打开终端
[plain] view plain copy
# qmake
# make
# make install
默认安装到/usr/local目录下。
2.配置
复制/usr/local/qwt6.1.2/plugins/designer目录下的libqwt_designer_plugin.so文件到$QTDIR/plugins/designer目录下,设计器就会出现qwt的控件。
[plain] view plain copy
# vi /etc/profile
添加环境变量:
[plain] view plain copy
export LD_LIBRARY_PATH=/usr/local/qwt-6.1.2/lib:$LD_LIBRARY_PATH
export CPLUS_INCLUDE_PATH=/usr/local/qwt-6.1.2/include:$CPLUS_INCLUDE_PATH
export C_INCLUDE_PATH=/usr/local/qwt-6.1.2/include:$C_INCLUDE_PATH
[plain] view plain copy
# reboot //重启使环境变量生效
配置完成。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)