📄 plotter.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 + -