📄 zdlinewidget.ui.h
字号:
/****************************************************************************** ui.h extension file, included from the uic-generated form implementation.**** If you wish to add, delete or rename functions or slots use** Qt Designer which will update this file, preserving your code. Create an** init() function in place of a constructor, and a destroy() function in** place of a destructor.*****************************************************************************/void ZDLineWidget::init(){ zw=new ZWorld(); canClick=false; Minutes=0; Minute=NULL; this->clear();}void ZDLineWidget::clear(){ LastClose=-1; this->Tel=NULL; this->style=0; drawCurrent=false;}void ZDLineWidget::setLastClose(float f){ this->LastClose=f;}void ZDLineWidget::setData( ZTel* tel,ZNameCode* currentStock){ this->LastClose=currentStock->fgetLastClose(); setData(tel,currentStock->getStyle());}void ZDLineWidget::setData( ZTel* tel,unsigned char style){ this->style=style; this->Tel=tel; if((style==0x10) || (style==0x20)) { if(Tel->isIndexDaysTel()) //Days MinutesData { return; this->Minute=((ZDaysTel*)Tel)->getMinute(0); this->Minutes=((ZDaysTel*)Tel)->getMinutes(); } else if (Tel->isIndexMinutesTel()) //MinutesData { this->Minute=((ZMinutesTel*)Tel)->getMinute(0); this->Minutes=((ZMinutesTel*)Tel)->getMinutes();// cerr<<"Minustes="<<Minutes<<endl; } else if (Tel->isOldMinutesTel()) // Old MinutesData { this->LastClose=((ZOldMinutesTel*)Tel)->fgetLastClose(); } else { return; } } else { if(Tel->isStockDaysTel()) //Days MinutesData { this->Minute=((ZDaysTel*)Tel)->getMinute(0); this->Minutes=((ZDaysTel*)Tel)->getMinutes(); } else if (Tel->isStockMinutesTel()) //MinutesData { this->Minute=((ZMinutesTel*)Tel)->getMinute(0); this->Minutes=((ZMinutesTel*)Tel)->getMinutes();// cerr<<"Minustes="<<Minutes<<endl; } else if (Tel->isOldMinutesTel()) // Old MinutesData { this->LastClose=((ZOldMinutesTel*)Tel)->fgetLastClose(); } else { return; } } this->repaint();}void ZDLineWidget::setData(int Minutes,ZMinutesStruct* Minute){ this->Minutes=Minutes; this->Minute=Minute;}void ZDLineWidget::drawRectF(QPainter *p,float x1,float y1,float x2,float y2){ int X1=zw->x(x1); int Y1=zw->y(y1); int X2=zw->x(x2); int Y2=zw->y(y2); int X0,W,Y0,H; if(X1<=X2) { X0=X1; W=X2-X1; } else { X0=X2; W=X1-X2; } if(Y1<=Y2) { Y0=Y1; H=Y2-Y1; } else { Y0=Y2; H=Y1-Y2; } if(W==0 || H==0) { p->drawLine(X0,Y0,X0+W,Y0+H); } else { p->drawRect(X0,Y0,W,H); }} void ZDLineWidget::paintEvent( QPaintEvent * ){ const int w0=54;int w2=42; const int ht=12; int mn=20; int cn=15; int h0=0; if(!canClick) { w2=0; mn=10; cn=7; } QPainter paint( this ); paint.setFont(*TextFont); int w=this->width(); int w1=w-w0-w2; int h=this->height(); int h1=(h-ht-5-2)*mn/ (mn+cn);// zw->setWorld(0,0,w,h,-1,-1,1,1); paint.setPen(QPen(BoardColor,2)); paint.drawLine(w0,h0+h1/2,w0+w1,h0+h1/2); paint.drawRect(w0,h0+1,w1,h1); int h20=h1+5;int h2=h-ht-2-h20; paint.setPen(QPen(BoardColor,2)); paint.drawRect(w0,h1+5,w1,h2); int i;// paint.setPen(QPen(QColor(0,0,255),0,Qt::DotLine)); paint.setPen(QPen(BoardColor,0)); for(i=1;i<mn;i++) { paint.drawLine(w0,h1*i/mn,w0+w1,h1*i/mn); } paint.setPen(QPen(BoardColor,0)); for(i=2;i<8;i=i+2) { paint.drawLine(w0+w1*i/8,h0,w0+w1*i/8,h1); } paint.setPen(QPen(BoardColor,0,Qt::DotLine)); for(i=1;i<8;i=i+2) { paint.drawLine(w0+w1*i/8,h0,w0+w1*i/8,h1); } if(Minutes==0)return; float MAX=-1;float MIN=1E66; for(i=0;i<Minutes;i++) { ZMinutesStruct *k=Minute+i; if(MAX<k->price())MAX=k->price(); if(MIN>k->price())MIN=k->price(); } if(LastClose>0) { if(fabs(MAX-LastClose)>fabs(LastClose-MIN)) { MIN=LastClose-fabs(MAX-LastClose); MAX=LastClose+fabs(MAX-LastClose); } else { MIN=LastClose-fabs(LastClose-MIN); MAX=LastClose+fabs(LastClose-MIN); }// MAX=LastClose*1.1;// MIN=LastClose*0.9;// paint.drawLine(0,h/2,w,h/2); } paint.setPen(QPen(NameColor)); paint.drawText(0,0,w0,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(MAX,0,'f',2)); paint.drawText(w0+w1,0,w2,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1\%").arg(MAX/LastClose*100-100,0,'f',2)); paint.drawText(0,h1-ht,w0,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(MIN,0,'f',2)); paint.drawText(w0+w1,h1-ht,w2,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1\%").arg(MIN/LastClose*100-100.0,0,'f',2)); for(i=1;i<mn;i++) { paint.drawText(0,h1*i/mn-ht/2,w0,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(MAX-(MAX-MIN)*i/mn,0,'f',2)); paint.drawText(w0+w1,h1*i/mn-ht/2,w2,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1\%").arg((MAX-(MAX-MIN)*i/mn)/LastClose*100-100,0,'f',2)); } zw->setWorld(w0,0,w1,h1,-0.5,MIN,((float)(Minutes)-0.5),MAX); paint.setPen( MinutesLineColor ); paint.setBrush(MinutesLineColor); for(i=1;i<Minutes;i++) { ZMinutesStruct *k=Minute+i; paint.drawLine(zw->x(i-1),zw->y((k-1)->price()),zw->x(i),zw->y(k->price())); } if(canClick) { if(drawCurrent) { paint.setPen( QColor(0,0,0) ); paint.drawLine(zw->x(currentMinute),zw->y(MIN),zw->x(currentMinute),zw->y(MAX)); } } ///////////////////////////////// // paint.setPen(QPen(QColor(0,0,255),0,Qt::DotLine)); paint.setPen(QPen(BoardColor,0)); for(i=1;i<cn;i++) { paint.drawLine(w0,h20+h2*i/cn,w0+w1,h20+h2*i/cn); } paint.setPen(QPen(BoardColor,0)); for(i=2;i<8;i=i+2) { paint.drawLine(w0+w1*i/8,h20,w0+w1*i/8,h20+h2); } paint.setPen(QPen(BoardColor,0,Qt::DotLine)); for(i=1;i<8;i=i+2) { paint.drawLine(w0+w1*i/8,h20,w0+w1*i/8,h20+h2); } if(Minutes==0)return; MAX=Minute->count()/100; MIN=0; for(i=1;i<Minutes;i++) { ZMinutesStruct *k=Minute+i; if(MAX<k->count()/100-(k-1)->count()/100)MAX=k->count()/100-(k-1)->count()/100; } zw->setWorld(w0,h20,w1,h2,-0.5,MIN,((float)(Minutes)-0.5),MAX); paint.setPen(QPen(NameColor)); paint.drawText(0,h20,w0,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(MAX,0,'f',0)); paint.drawText(0,h20+h2-ht,w0,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(MIN,0,'f',0)); for(i=1;i<cn;i++) { paint.drawText(0,h20+h2*i/cn-ht/2,w0,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(MAX-(MAX-MIN)*i/cn,0,'f',0)); } paint.drawText(w0-w0/2,h20+h2+1,w0,ht,Qt::AlignHCenter | Qt::AlignVCenter,QString("9:30")); paint.drawText(w0+w1/4-w0/2,h20+h2+1,w0,ht,Qt::AlignHCenter | Qt::AlignVCenter,QString("10:30")); paint.drawText(w0+w1/2-w0/2,h20+h2+1,w0,ht,Qt::AlignHCenter | Qt::AlignVCenter,QString("11:30-13:00")); paint.drawText(w0+w1*3/4-w0/2,h20+h2+1,w0,ht,Qt::AlignHCenter | Qt::AlignVCenter,QString("14:00")); paint.drawText(w0+w1-w0/2,h20+h2+1,w0,ht,Qt::AlignHCenter | Qt::AlignVCenter,QString("15:00")); paint.setPen( MinutesLineColor ); paint.setBrush(MinutesLineColor); drawRectF(&paint,(-0.4+i),0,(0.4+i),Minute->count()/100); for(i=1;i<Minutes;i++) { ZMinutesStruct *k=Minute+i; drawRectF(&paint,(-0.4+i),0,(0.4+i),k->count()/100-(k-1)->count()/100); } if(canClick) { if(drawCurrent) { paint.setPen( QColor(0,0,0) ); paint.drawLine(zw->x(currentMinute),zw->y(MIN),zw->x(currentMinute),zw->y(MAX)); writeCurrent(&paint,0,0,w0,175); } }}void ZDLineWidget::writeCurrent(QPainter* p,int x,int y,int w,int h){// p->setRasterOp ( Qt::XorROP ) ; p->setPen( PopColor ); p->setBrush(PopColor); p->drawRect(x,y,w,h); p->setPen((NameColor)); int ht=h/10; zDrawText(p,x,y,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString("时间:")),NameColor); zDrawText(p,x,y+ht,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString(sgetTime(currentMinute).c_str())),NameColor); zDrawText(p,x,y+2*ht,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString("最新:")),NameColor); zDrawFloat(p,x,y+3*ht,w+2,ht,(Minute+currentMinute)->price(),LastClose); zDrawText(p,x,y+4*ht,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString("涨跌:")),NameColor); zDrawFloat(p,x,y+5*ht,w+2,ht,(Minute+currentMinute)->price()-LastClose,0); zDrawText(p,x,y+6*ht,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString("平均:")),NameColor); // p->drawText(x,y+7*ht,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString("%1").arg((Minute+currentMinute)->low(),0,'f',2))); zDrawText(p,x,y+8*ht,w+2,ht,Qt::AlignLeft | Qt::AlignVCenter,tr(QString("成交手数:")),NameColor); int c; if(currentMinute==0)c=(Minute+currentMinute)->count(); else c=(Minute+currentMinute)->count()-(Minute+currentMinute-1)->count(); zDrawInt(p,x,y+9*ht,w+2,ht,(c/100));}void ZDLineWidget::setCurrentMinute(int m){ this->currentMinute=m; repaint();}void ZDLineWidget::setCanClick(bool can){ canClick=can;}void ZDLineWidget::mousePressEvent( QMouseEvent * e ){ if(Minute==NULL)return; if(!canClick)return; if(e->button()==Qt::RightButton) { drawCurrent=false; this->repaint(); return; } else if(e->button()==Qt::LeftButton) { int cm=(int)(((double)(zw->fx(e->x())))+0.5); if(cm<0)cm=0; if(cm>=Minutes-1)cm=Minutes-1; currentMinute=cm;// ((ZMinutesLine*)(this->parent()))->setCurrentMinute(currentMinute); drawCurrent=true; this->repaint();// clickMinutes(Minute+currentMinute,currentMinute); } else { }}string ZDLineWidget::sgetTime(int Time){ int H,M; if(Time<=120) { H=9; M=30; H=H+(Time+M)/60; M=(Time+M)%60; } else { H=13; M=0; H=H+(Time+M-120)/60; M=(Time+M-120)%60; } string s; stringstream ss; ss<<H<<":"<<M; ss>>s; return(s);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -