Qt学习笔记-自绘时钟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Qt学习笔记-自绘时钟
Qt学习笔记-自绘时钟运行截图如下(时针,分针,秒针都可以动的哦):
代码如下:
Widget.h#ifndefWIDGET_H#defineWIDGET_H#includeQWidgetnamesp aceUi{classWidget;}classWidget:publicQWidget{Q_OBJECT public:explicitWidget(QWidget*parent=0);~Widget();protected :voidpaintEvent(QPaintEvent*)override;voidresizeEvent(QResi zeEvent*event)override;voidmouseMoveEvent(QMouseEvent*event )override;voidmousePressEvent(QMouseEvent*event)override;vo idmouseReleaseEvent(QMouseEvent*event)override;private:Ui:: Widget*ui;boolm_dragging;QPointm_startPosition;QPointm_fram ePosition;};#endif//WIDGET_HWidget.cpp#includewidget.h#incl udeui_widget.h#includeQPainter#includeQTime#includeQMouseEv ent#includeQTImerWidget::Widget(QWidget*parent):QWidget(par ent),ui(newUi::Widget){ui-setupUi(this);QTimer*timer=newQTi mer(this);connect(timer,SIGNAL(timeout()),this,SLOT(update( )));timer-start(1000);m_dragging=false;}Widget::~Widget(){d eleteui;}voidWidget::paintEvent(QPaintEvent*){ QPainterpainter(this);painter.setRenderHint(QPainter::Antia liasing);painter.translate(width()/2,height()/2);intside=qM
in(width(),height());painter.scale(side/200.0,side/200.0);Q Penpen(Qt::black,4);painter.setPen(pen);QBrushbrush(QColor( 247,238,214,80));painter.setBrush(brush);painter.drawEllips e(QPointF(0,0),98,98);painter.setPen(Qt::white);painter.dra wEllipse(QPointF(0,0),100,100);QTimetime=QTime::currentTime ();painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);pa inter.save();painter.rotate(30.0*((time.hour()+time.minute( )/60.0)));staticconstQPointhourHand[3]={QPoint(2,0),QPoint( -2,0),QPoint(0,-60)};painter.drawConvexPolygon(hourHand,3); painter.restore();staticconstQPointminuteHand[3]={QPoint(2, 0),QPoint(-2,0),QPoint(0,-95)};staticconstQPointsecondHand[ 3]={QPoint(2,0),QPoint(-2,0),QPoint(0,-105)};painter.save() ;painter.rotate(6.0*(time.minute()+time.second()/60.0));pai nter.drawConvexPolygon(minuteHand,3);painter.restore();pain ter.save();
painter.rotate(6.0*time.second());painter.drawConvexPolygon (minuteHand,3);painter.restore();painter.save();painter.set Pen(Qt::black);painter.setBrush(Qt::lightGray);painter.draw Ellipse(QPointF(0,0),2,2);painter.drawPoint(0,0);painter.re store();painter.setPen(Qt::black);for(inti=0;i++i){painter. drawLine(90,0,96,0);painter.rotate(30.0);}for(intj=0;j++j){ if((j%5)!=0)painter.drawLine(95,0,96,0);painter.rotate(6.0)
;}}voidWidget::mousePressEvent(QMouseEvent*event){if(event-button()==Qt::LeftButton){m_dragging=true;m_startPosition=e vent-globalPos();m_framePosition=frameGeometry().topLeft(); }QWidget::mousePressEvent(event);}voidWidget::mouseMoveEven t(QMouseEvent*event){if(event-buttons()Qt::LeftButton){if(m _dragging){QPointdelta=event-globalPos()-m_startPosition;mo ve(m_framePosition+delta);}}QWidget::mouseMoveEvent(event); }voidWidget::resizeEvent(QResizeEvent*event){intside=qMin(w idth(),height());QRegionmaskedRegion(width()/2-side/2,heigh t()/2-side/2,side,side,QRegion::Ellipse);setMask(maskedRegi on);
}voidWidget::mouseReleaseEvent(QMouseEvent*event){m_draggin g=false;QWidget::mouseReleaseEvent(event);}main.cpp#include widget.h#includeQApplicationintmain(intargc,char*argv[]){QA pplicationa(argc,argv);Widgetw;w.show();returna.exec();}。