QT编写动态曲线.docx

上传人:b****8 文档编号:10691649 上传时间:2023-02-22 格式:DOCX 页数:16 大小:18.57KB
下载 相关 举报
QT编写动态曲线.docx_第1页
第1页 / 共16页
QT编写动态曲线.docx_第2页
第2页 / 共16页
QT编写动态曲线.docx_第3页
第3页 / 共16页
QT编写动态曲线.docx_第4页
第4页 / 共16页
QT编写动态曲线.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

QT编写动态曲线.docx

《QT编写动态曲线.docx》由会员分享,可在线阅读,更多相关《QT编写动态曲线.docx(16页珍藏版)》请在冰豆网上搜索。

QT编写动态曲线.docx

QT编写动态曲线

喜马拉雅--巅峰之作

 

主页博客相册|个人档案|好友|i贴吧

 

查看文章

 

【转】qt实现实时动态曲线

(一)

2011年04月19日星期二下午12:

39

转载自Linuxzrq

最终编辑Linuxzrq

display.h:

#ifndefDISPLAY_H

#defineDISPLAY_H

#ifndefQT_H

#include

#endif//QT_H

classQTimer;

classScreen;

classQStringList;

classQString;

classQLineEdit;

classQPushButton;

classDisplayWidget:

publicQWidget{

   Q_OBJECT

public:

   DisplayWidget(QWidget*parent=0,constchar*name=0);

   QSizesizeHint()const;

   doublereadCurveDate();

   voidreadFile();

   voidrun();

privateslots:

   voidtick();

   voidstart();//startbutton

   voidstop();//stopbutton

private:

       Screen*screen1;

       QLineEdit*lineEdit;//displaycurvedata

       QPushButton*startButton,*stopButton;

       QTimer*timer;

       enum{Margin=40};      

       QStringstr;

       QStringListstrlist;

       QStringList:

:

Iteratorit;

       inttime;

       doubleyval;

};

#endif//PLOT_H

display.cpp:

#include"display.h"

#include"screen.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

DisplayWidget:

:

DisplayWidget(QWidget*parent,constchar*name)

   :

QWidget(parent,name)

{

   timer=0;

   QVBoxLayout*vbox=newQVBoxLayout(this,10);

   QHBoxLayout*hbox=newQHBoxLayout(vbox);

   screen1=newScreen(this);

   screen1->setYTitle(QObject:

:

tr("dynamiccurve"));

   vbox->addWidget(screen1);

   lineEdit=newQLineEdit(this);

   lineEdit->setReadOnly(TRUE);

   hbox->addWidget(lineEdit);

   startButton=newQPushButton(this);

   startButton->setText(tr("&Start"));

   startButton->setAccel(QKeySequence(tr("Alt+S")));

   stopButton=newQPushButton(this);

   stopButton->setText(tr("Sto&p"));

   stopButton->setAccel(QKeySequence(tr("Alt+P")));

   hbox->addWidget(startButton);

   hbox->addWidget(stopButton);

   connect(startButton,SIGNAL(clicked()),SLOT(start()));

   connect(stopButton,SIGNAL(clicked()),SLOT(stop()));

   time=0;

   yval=0.0;

   readFile();

}

voidDisplayWidget:

:

run()

{

   if(!

timer)

   {

       timer=newQTimer(this);

       connect(timer,SIGNAL(timeout()),SLOT(tick()));

   }

   timer->start(1000);//delay1s

}

voidDisplayWidget:

:

tick()

{

       yval=readCurveDate();

       screen1->animate(yval);

       lineEdit->setText(QString:

:

number(yval));//displaycurvedata

}

voidDisplayWidget:

:

start()

{

       run();

}

voidDisplayWidget:

:

stop()

{

       timer->stop();

}

QSizeDisplayWidget:

:

sizeHint()const

{

       returnQSize(32*Margin,24*Margin);

}

//readdatafromfile

voidDisplayWidget:

:

readFile()

{

       QFilefile("in.txt");

       file.open(QIODevice:

:

ReadOnly);

       QTextStreamin(&file);      

       str=in.read();

       strlist=QStringList:

:

split("",str);

       it=strlist.begin();      

}

doubleDisplayWidget:

:

readCurveDate()

{

       QStringtempStr;

       doubletempDate;

       tempStr=(QString)*it;

       tempDate=tempStr.toDouble();

      

       if(it!

=strlist.end())

       {      

               ++it;  

       }

       else

       {

               it=strlist.begin();

       }

       returntempDate;

screen.h:

#ifndefSCREEN_H

#defineSCREEN_H

#include

#include

#include

#include

#include

#include

#defineFrameWidth         2

#defineStep               5

#defineBaseFontHeight     16

#defineBaseLineLenght     5

#defineSpaceMargin        4

classQRect;

classQString;

classScreen:

publicQFrame{

       Q_OBJECT

public:

       Screen(QWidget*parent=0,constchar*name=0,Qt:

:

WFlagsflags=0);

       voidanimate(doubley);

       voidsetXTitle(QStringstr);

       voidsetYTitle(QStringstr);

protected:

       voidinitNumber(void);

       voidinitCordinate(QPainter&p);

       voidupdateCurve(QPainter&p);

       virtualvoidshowEvent(QShowEvent*);

       virtualvoidhideEvent(QHideEvent*);

       QSizeminimumSize()const;

public:

       doublenewY,oldY;

       intnumXTicks,numYTicks;

       QValueVectorYval;

       boolfirstShow;

       intsec,min,hour;

       QPixmapsaveBuffer,newBuffer,midBuffer;

       QRectrectCordinate;

       QRectfromSaveRect;

       QRecttoNewRect;

       QRectrectYText;

       QRectrectXText;

       /*Weusethispaintertodraweveringonthenewbuffer.*/

       QPainterdrawPainter;

       QStringstringYTitle;

       QStringstringXTitle;

};

#endif/*SCREEN_H*/

screen.cpp:

#include"screen.h"

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

Screen:

:

Screen(QWidget*parent,constchar*name,Qt:

:

WFlagsflags):

QFrame(parent,name,flags|Qt:

:

WNoAutoErase)

{

       setLineWidth(FrameWidth);      

       setFrameStyle(Panel|Sunken);

       setBackgroundMode(Qt:

:

PaletteBase);      

       setSizePolicy(QSizePolicy:

:

MinimumExpanding,QSizePolicy:

:

MinimumExpanding);

       firstShow=TRUE;

}

voidScreen:

:

showEvent(QShowEvent*)

{

       if(firstShow)

               initNumber();

       initCordinate(drawPainter);

}

QSizeScreen:

:

minimumSize()const

{

        returnQSize(20*SpaceMargin,20*SpaceMargin);

}

voidScreen:

:

hideEvent(QHideEvent*)

{

       firstShow=FALSE;

}

voidScreen:

:

setXTitle(QStringstr)

{

       stringXTitle=str;

}

voidScreen:

:

setYTitle(QStringstr)

{

       stringYTitle=str;

}

voidScreen:

:

initNumber()

{

       saveBuffer.resize(size());//setthesizeandthebackcolorof

       saveBuffer.fill(this,0,0);//thosethreeQPixmapsassameastheScreen

       newBuffer.resize(size());

       newBuffer.fill(this,0,0);

       midBuffer.resize(size());

       midBuffer.fill(this,0,0);

       drawPainter.begin(&newBuffer);

       QRectnewWindow=drawPainter.window();

       newY=0;

       oldY=0;

       sec=0;

       min=0;

       hour=0;

       stringXTitle=QObject:

:

tr("Time(hh:

mm:

ss)");

       Yval.push_back((double)oldY);

       rectCordinate.setRect(

               newWindow.topLeft().x()+FrameWidth+2*BaseFontHeight+2*BaseLineLenght,

               newWindow.topLeft().y()+FrameWidth+2*SpaceMargin,

               newWindow.width()-2*(FrameWidth+BaseFontHeight+BaseLineLenght+SpaceMargin),

               newWindow.height()-2*(FrameWidth+BaseFontHeight+BaseLineLenght+SpaceMargin));

       if(0!

=(rectCordinate.width()%(Step*Step)))

       {

               intx=rectCordinate.width()%(Step*Step);       //((int)sqrt((float)Step));

               rectCordinate.setWidth(rectCordinate.width()-x+1);

       }

       if(0!

=(rectCordinate.height()%(Step*Step)))

       {

               inty=rectCordinate.height()%(Step*Step);                               

               rectCordinate.setHeight(rectCordinate.height()-y+1);

       }

       numXTicks=rectCordinate.width()/Step;

       numYTicks=rectCordinate.height()/Step;

       rectYText.setRect(newWindow.topLeft().x()+FrameWidth,newWindow.topLeft().y(+FrameWidth+2*SpaceMargin,BaseFontHeight,rectCordinate.height());

       rectXText.setRect(rectCordinate.bottomLeft().x(),

               newWindow.bottomLeft().y()-FrameWidth-BaseFontHeight,

rectCordinate.width(),BaseFontHeight);

       fromSaveRect.setRect(rectCordinate.topLeft().x()+Step,rectCordinate.topLeft().y()+1,

               rectCordinate.width()-Step-1,

               rectCordinate.height()+2*BaseLineLenght+BaseFontHeight);

       toNewRect.setRect(rectCordinate.topLeft().x()+1,rectCordinate.topLeft().y()+1,

               rectCordinate.width()-Step-1,

               rectCordinate.height()+2*BaseLineLenght+BaseFontHeight);

       drawPainter.drawRect(toNewRect);

}

voidScreen:

:

initCordinate(QPainter&pCordinate)

{

if(firstShow)

{      

       pCordinate.setPen(Qt:

:

blue);

       pCordinate.drawRect(rectCordinate);

       this->setAttribute(Qt:

:

WA_PaintOutsidePaintEvent);//

       inty0=rectCordinate.bottomLeft().y();

       intx0=rectCordinate.bottomLeft().x();

       intyText=0;

       for(intj=0;j<=numYTicks;j++)

       {

               pCordinate.drawLine(x0-BaseLineLenght,y0,x0,y0);

               if(0==j%Step)

               {

                       pCordinate.drawLine(x0-2*BaseLineLenght,y0,x0-BaseLineLenght,y0);

                       pCordinate.save();

                       pCordinate.setPen(QPen(Qt:

:

blue,1,Qt:

:

DotLine));

                       pCordinate.drawLine(x0,y0,rectCordinate.bottomRight().x(),y0);

                       pCordinate.restore();

                       pCordinate.setPen(Qt:

:

black);

                       pCordinate.drawText(x0-2*BaseLineLenght-BaseFontHeight,

                               y0-2*BaseFontHeight+5*Step,BaseFontHeight,BaseFontHeight+Step,

                               Qt:

:

AlignCenter,QString:

:

number(yText));

                               yText+=10;

                       pCordinate.setPen(Qt:

:

blue);

               

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1