Qt学习笔记-自绘时钟
生活随笔
收集整理的這篇文章主要介紹了
Qt学习笔记-自绘时钟
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
運行截圖如下(時針,分針,秒針都可以動的哦):
代碼如下:
Widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void paintEvent(QPaintEvent *)override;void resizeEvent(QResizeEvent *event)override;void mouseMoveEvent(QMouseEvent *event)override;void mousePressEvent(QMouseEvent *event)override;void mouseReleaseEvent(QMouseEvent *event)override; private:Ui::Widget *ui;bool m_dragging;QPoint m_startPosition;QPoint m_framePosition; };#endif // WIDGET_HWidget.cpp
#include "widget.h" #include "ui_widget.h"#include <QPainter> #include <QTime> #include <QMouseEvent> #include <QTImer>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);QTimer *timer=new QTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(update()));timer->start(1000);m_dragging = false; }Widget::~Widget() {delete ui; }void Widget::paintEvent(QPaintEvent *){QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.translate(width()/2,height()/2);int side=qMin(width(),height());painter.scale(side/200.0,side/200.0);QPen pen(Qt::black,4);painter.setPen(pen);QBrush brush(QColor(247,238,214,80));painter.setBrush(brush);painter.drawEllipse(QPointF(0,0),98,98);painter.setPen(Qt::white);painter.drawEllipse(QPointF(0,0),100,100);QTime time=QTime::currentTime();painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);painter.save();painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));static const QPoint hourHand[3] = {QPoint(2, 0),QPoint(-2, 0),QPoint(0, -60)};painter.drawConvexPolygon(hourHand, 3);painter.restore();static const QPoint minuteHand[3] = {QPoint(2, 0),QPoint(-2, 0),QPoint(0, -95)};static const QPoint secondHand[3]={QPoint(2,0),QPoint(-2,0),QPoint(0,-105)};painter.save();painter.rotate(6.0 * (time.minute() + time.second() /60.0));painter.drawConvexPolygon(minuteHand, 3);painter.restore();painter.save();painter.rotate(6.0 * time.second());painter.drawConvexPolygon(minuteHand, 3);painter.restore();painter.save();painter.setPen(Qt::black);painter.setBrush(Qt::lightGray);painter.drawEllipse(QPointF(0, 0), 2, 2);painter.drawPoint(0, 0);painter.restore();painter.setPen(Qt::black);for (int i = 0; i < 12; ++i) {painter.drawLine(90, 0, 96, 0);painter.rotate(30.0);}for (int j = 0; j < 60; ++j) {if ((j % 5) != 0)painter.drawLine(95, 0, 96, 0);painter.rotate(6.0);} }void Widget::mousePressEvent(QMouseEvent *event){if(event->button()==Qt::LeftButton){m_dragging=true;m_startPosition=event->globalPos();m_framePosition=frameGeometry().topLeft();}QWidget::mousePressEvent(event); }void Widget::mouseMoveEvent(QMouseEvent *event){if(event->buttons()&Qt::LeftButton){if(m_dragging){QPoint delta=event->globalPos()-m_startPosition;move(m_framePosition+delta);}}QWidget::mouseMoveEvent(event); }void Widget::resizeEvent(QResizeEvent *event){int side = qMin(width(), height());QRegion maskedRegion(width() / 2 - side / 2, height() /2 - side / 2, side, side, QRegion::Ellipse);setMask(maskedRegion); }void Widget::mouseReleaseEvent(QMouseEvent *event){m_dragging=false;QWidget::mouseReleaseEvent(event); }main.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!
總結
以上是生活随笔為你收集整理的Qt学习笔记-自绘时钟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-Qt元对象系统解析【2合1
- 下一篇: Qt学习笔记-OpenGL做正方体并旋转