⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plotter.cpp

📁 基于QQ2440 ARM开发板的实时绘制曲线图的QT程序
💻 CPP
字号:
/****************************************************************************** Form implementation generated from reading ui file 'drawdemo.ui'**** Created: Wed Feb 20 13:06:23 2008**      by:  The User Interface Compiler (uic)**** WARNING! All changes made in this file will be lost!****************************************************************************/#include "plotter.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <termios.h>#include <time.h>#include <errno.h>#include <string.h>#include <fcntl.h>#include <qapplication.h>#include <qsocketdevice.h>#include <qnamespace.h>#include <qlayout.h>#include <qpushbutton.h>#include <qmenubar.h>#include <qpopupmenu.h>#include <qvariant.h>#include <qtooltip.h>#include <qwhatsthis.h>#include <qdatetime.h>#include <qstring.h>#include <qmultilineedit.h>#define xStep 55  //x#define yStep 25  //y#define frameWidth 496#define frameHeight 251/*  *  Constructs a Form1 which is a child of 'parent', with the  *  name 'name' and widget flags set to 'f'  */MyPlotter::MyPlotter( QWidget* parent,  const char* name, WFlags fl )    : QWidget( parent, name, fl ){    if(!name)        setName( "PlotterWindow" );    resize( 640, 480 );    setCaption( tr( "Plotter" ) );    int value=0;	QVBoxLayout *topLayout=new QVBoxLayout(this);	QMenuBar *menubar=new QMenuBar(this);	QPopupMenu *popup=new QPopupMenu();	QPopupMenu *option=new QPopupMenu();    QPopupMenu *udp=new QPopupMenu();    popup->insertItem("&Quit",qApp,SLOT(quit()));	menubar->insertItem("&File",popup);	option->insertItem("&Small",this,SLOT(select1()));    option->insertItem("&Big",this,SLOT(select2()));    menubar->insertItem("&option",option);    udp->insertItem("&Udp",this,SLOT(udp_set()));    menubar->insertItem("&NetWork",udp);    topLayout->setMenuBar(menubar);	QString s=NULL;    /***建立绘图框区***/	frame=new QFrame(this,"frame");	frame->setBackgroundColor(black);	frame->setGeometry(QRect(30,40,frameWidth,frameHeight));	/***建立横坐标轴上的时间标签***/	for(int i=0;i<10;i++)	{		x_label[i]=new QLabel("timer",this);		x_label[i]->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);		x_label[i]->setGeometry(QRect(10+(i*xStep),295,45,20));	}    /***建立纵坐标轴上的数据标签***/	for(int i=0;i<=10;i++)	{		s=s.setNum(value);//该函数是将整数转换为字符串		y_label[i]=new QLabel(s,this);		y_label[i]->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);		y_label[i]->setGeometry(QRect(10,285-(i*yStep),12,10));		value+=5;		xCoor[i]=(i*xStep);//保存x坐标轴上的坐标值,以供后面绘图所用	}    /***建立接收数据显示区***/    QLabel *display=new QLabel(this);    display->setGeometry(QRect(10,320,80,20));    display->setText("Display The Data:");    medit=new QMultiLineEdit(this);//构造一个文本对象,用来输出接收的数据    medit->setWordWrap(QMultiLineEdit::WidgetWidth);//该函数的目的:是当输出的文本数据超过文本框的长度时,自动换行    medit->setGeometry(10,340,frameWidth+10,100);//设置文本框的大小    medit->setReadOnly(TRUE);        pc_ip=new QLabel(this);    pc_port=new QLabel(this);    pc_ip_edit=new QLineEdit(this);    pc_port_edit=new QLineEdit(this);    arm_ip=new QLabel(this);    arm_port=new QLabel(this);    arm_ip_edit=new QLineEdit(this);    arm_port_edit=new QLineEdit(this);    button=new QPushButton("Confirm",this);    MUReceiveSocket=new QSocketDevice(QSocketDevice::Datagram);    MSocketNotifier=new QSocketNotifier(MUReceiveSocket->socket(),QSocketNotifier::Read,0,"MSocketNotifier");    connect(MSocketNotifier,SIGNAL(activated(int)),this,SLOT(OnMReceive()));        /***串口初始化***/    /*    struct termios newtio,oldtio;    fd=open("/dev/tts/1",O_RDWR|O_NOCTTY|O_NDELAY);//打开串口设备文件    if(fd<0)    {        perror("open serial device error");        exit(1);    }    if(fcntl(fd,F_SETFL,0)<0)        perror("fcntl failed");    if(isatty(STDIN_FILENO)!=0)        printf("isatty sucess!\n");    tcgetattr(fd,&oldtio);    bzero(&newtio,sizeof(newtio));    newtio.c_cflag|=CLOCAL|CREAD;    newtio.c_cflag&=~CSIZE;    newtio.c_cflag|=CS8;    newtio.c_cflag&=~PARENB;    cfsetispeed(&newtio,B9600);    cfsetospeed(&newtio,B9600);    newtio.c_cflag&=~CSTOPB;    newtio.c_cc[VTIME]=0;    newtio.c_cc[VMIN]=0;    tcflush(fd,TCIFLUSH);    if(tcsetattr(fd,TCSANOW,&newtio)<0)    {        perror("tcsetattr is error");        exit(1);    }    */    timer0=new QTimer(this,"timer0");	connect(timer0,SIGNAL(timeout()),this,SLOT(flushBuff()));	timer0->start(1000);    flag=1;    confirm_flag=0;}void MyPlotter::select1(){    flag=1;}void MyPlotter::select2(){    flag=2;}void MyPlotter::udp_set(){ pc_ip->setGeometry(QRect(frameWidth+40,20,80,25)); pc_ip->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter); pc_ip->setText("Local IP Address"); pc_ip_edit->setGeometry(QRect(frameWidth+40,55,80,25)); pc_port->setGeometry(QRect(frameWidth+40,90,80,25)); pc_port->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter); pc_port->setText("Local Port Value"); pc_port_edit->setGeometry(QRect(frameWidth+40,125,80,25)); arm_ip->setGeometry(QRect(frameWidth+40,160,80,25)); arm_ip->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter); arm_ip->setText("ARM IP Address"); arm_ip_edit->setGeometry(QRect(frameWidth+40,195,80,25)); arm_port->setGeometry(QRect(frameWidth+40,230,80,25)); arm_port->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter); arm_port->setText("ARM PORT Value"); arm_port_edit->setGeometry(QRect(frameWidth+40,275,80,25)); button->setGeometry(QRect(frameWidth+40,310,80,25)); button->setFont(QFont("Times",18,QFont::Bold)); connect(button,SIGNAL(clicked()),this,SLOT(establish()));}void MyPlotter::establish(){  int temp; arm_port_value=arm_port_edit->text(); arm_ip_address=arm_ip_edit->text(); pc_ip_address=pc_ip_edit->text(); temp=arm_port_value.toInt(); Port=temp; FakeAddress=arm_ip_address; ArmAddress.setAddress(FakeAddress); FakeAddress=pc_ip_address; MyAddress.setAddress(FakeAddress); MUReceiveSocket->bind(MyAddress,Port); MUReceiveSocket->writeBlock(pc_ip_address,12,ArmAddress,Port);}void MyPlotter::OnMReceive(){ int readcount; readcount=MUReceiveSocket->readBlock(ReceiveData,20); ReceiveData[readcount]='\0'; confirm_flag=1;}int num=0;int num1=0;int sec=0;int row_cout=0;;void MyPlotter::flushBuff(){    QTime timePrv;	QTime timeCur=QTime::currentTime();    int value;    convert_data=ReceiveData;    value=convert_data.toInt();   if(confirm_flag)   {    if(flag==1)    {        row_cout++;        num++;	    QString x=NULL;        if(num<=10)	    {                  buffer[num-1]=value;         x_label[num-1]->setText(timeCur.toString());	     x=x.setNum(buffer[num-1]);         medit->insert(timeCur.toString());         medit->insert("   ");         medit->insert(x);         medit->insert("   ");         }	    else	    {	     num=10;		         int j=8;	     for(int i=0;i<9;i++)	     {		  buffer[i]=buffer[i+1];		  timePrv=timeCur.addSecs(-(j+1));		  x_label[i]->setText(timePrv.toString());		  j--;	     }          buffer[num-1]=value;         x_label[num-1]->setText(timeCur.toString());         x=x.setNum(buffer[num-1]);         medit->insert(timeCur.toString());         medit->insert("   ");         medit->insert(x);         medit->insert("   ");         if(row_cout%50==0)         {          row_cout=0;          medit->clear();         }        }	         }    else if(flag==2)    {     QString x=NULL;     QTime mytime(0,sec,0);     for(int i=0;i<10;i++)     {      x_label[i]->setText(mytime.toString());      mytime=mytime.addSecs(60);     }     num1++;     if(num1<495)     {      x_data[num1]=value;      x=x.setNum(x_data[num1]);     }     else     {         for(int i=0;i<495;i++)             x_data[i]=0;         num1=0;         sec=sec+10;     }    }   }     repaint(0,0,frameWidth,frameHeight,TRUE);}void MyPlotter::paintEvent(QPaintEvent *){	frame->erase(0,0,frameWidth,frameHeight);	painter=new QPainter();	painter->begin(frame);	QPoint beginPoint;	QPoint endPoint;	drawNet();	drawHui();	painter->end();	bitBlt(frame,0,0,frame);}void MyPlotter::drawHui(){ QPoint beginPoint,endPoint;	 if(flag==1) {  painter->setPen(red);  for(int i=0;i<9;i++)  {	beginPoint.setX(xCoor[i]);	beginPoint.setY(frameHeight-((frameHeight/50)*buffer[i]));	endPoint.setX(xCoor[i+1]);	endPoint.setY(frameHeight-((frameHeight/50)*buffer[i+1]));	painter->drawLine(beginPoint,endPoint);  }  }  else if(flag==2) {     int step=1;     painter->setPen(red);     for(int i=0;i<495;i++)     {         beginPoint.setX(i*step);         beginPoint.setY(frameHeight-((frameHeight/50)*x_data[i]));         endPoint.setX(step+i*step);         endPoint.setY(frameHeight-((frameHeight/50)*x_data[i+1]));         painter->drawLine(beginPoint,endPoint);    } } }void MyPlotter::drawNet(){   QPoint beginPoint,endPoint;	painter->setPen(white);	for(int i=0;i<11;i++)//across	{		beginPoint.setX(0);		beginPoint.setY(i*yStep);		endPoint.setX(frameWidth);		endPoint.setY(i*yStep);		painter->drawLine(beginPoint,endPoint);	}	for(int i=0;i<10;i++)//eract	{		beginPoint.setX(i*xStep);		beginPoint.setY(0);		endPoint.setX(i*xStep);		endPoint.setY(frameHeight);		painter->drawLine(beginPoint,endPoint);	}}	/*   *  Destroys the object and frees any allocated resources */MyPlotter::~MyPlotter(){    // no need to delete child widgets, Qt does it all for us}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -