Qt 项目实战:电子时钟


电子时钟
隐藏widget边框

this>setWindowFlags(Qt::FramelessWindowHint); // 隐藏边框

实时跟踪鼠标

this>setMouseTracking(true); // 实时跟踪鼠标

通过信号与槽来刷新时针分针秒针状态

connect(timer, SIGNAL(timeout()), this, SLOT(update()));

鼠标左键按下移动窗口

1 /** 2 * 鼠标当前坐标 移动窗口 3 * @brief Widget::mouseMoveEvent 4 * @param event 5 */ 6 void Widget::mouseMoveEvent(QMouseEvent *event) 7 18 }

设置移动窗口的位置

1 /** 2 * 窗口移动的位置都是相对于桌面左上角 3 * @brief Widget::mousePressEvent 4 * @param event 5 */ 6 void Widget::mousePressEvent(QMouseEvent *event) 7

绘制时钟

1 /** 2 * 绘制时钟 3 * @brief Widget::paintEvent 4 * @param event 5 */ 6 void Widget::paintEvent(QPaintEvent *event) 7 ; 14 static const QPoint minuteHand[3]=; 19 static const QPoint secondHand[3]=; 24 QTime time = QTime::currentTime(); 25 26 paint.begin(this); 27 28 paint.setRenderHint(QPainter::Antialiasing,true); 29 paint.translate(this>width()/2,this>height()/2); // 移动坐标 30 31 // 缩放 32 int side = qMin(width(),height()); // 长宽的最小值:定义一个边界 保证是圆形的 33 paint.scale(side /200.0,side/200.0); // 跟随窗口大小发生变化 34 35 // 绘制时针刻度线 36 paint.setPen(Qt::white); 37 for (int i =0; i <12; i++) 41 42 // 绘制分针刻度线 (360 / 60 = 6) 43 for(int j =0; j < 60; j++) 48 paint.rotate(6.0); 49 } 50 51 // 绘制时针 旋转角度 = 小时数 * 30° 52 paint.save(); 53 paint.setBrush(Qt::white); // 设置指针填充色 54 paint.rotate(30.0 * (time.hour() + time.minute() /60.0)); 55 paint.drawConvexPolygon(hourHand,3); 56 paint.restore(); // 还原画笔 57 58 // 绘制分针 旋转角度 = 分钟数 * 6° 59 paint.save(); 60 paint.rotate(6.0 * (time.minute() + time.second() / 60.0)); 61 paint.drawConvexPolygon(minuteHand,3); 62 paint.restore(); // 还原画笔 64 // 绘制秒针 旋转角度 = 秒数 * 6° 65 paint.save(); 66 paint.rotate(6.0 * time.second()); 67 paint.drawConvexPolygon(secondHand,3); 68 paint.restore(); // 还原画笔 69 70 paint.end(); 71 }

鼠标双击全屏显示

1 /** 2 * 鼠标双击全屏 3 * @brief Widget::mouseDoubleClickEvent 4 * @param event 5 */ 6 void Widget::mouseDoubleClickEvent(QMouseEvent *event) 7 14 else 15 19 }

lcd显示时间

1 void Widget::refreshTime() 2

完整代码

widget.h

1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 #include <QTimer> 6 #include <QTime> 7 #include <QDebug> 8 #include <QMenu> 9 #include <QMouseEvent> 10 #include <QPaintEvent> 11 #include <QAction> 12 #include <QToolTip> 13 #include <QPainter> 14 15 QT_BEGIN_NAMESPACE 16 namespace Ui 17 QT_END_NAMESPACE 18 19 class Widget : public QWidget 20 ; 53 #endif // WIDGET_H

widgetpp

1 #include "widget.h" 2 #include "ui_widget.h" 3 4 Widget::Widget(QWidget *parent) 5 : QWidget(parent) 6 , ui(new Ui::Widget) 7 20 21 Widget::~Widget() 22 25 26 void Widget::refreshTime() 27 32 33 /** 34 * 右键菜单接口 35 * @brief Widget::contextMenuEvent 36 * @param event 37 */ 38 void Widget::contextMenuEvent(QContextMenuEvent *event) 39 47 48 /** 49 * 右键菜单结构 50 * @brief Widget::createActions 51 */ 52 void Widget::createActions() 53 73 74 /** 75 * 鼠标当前坐标 移动窗口 76 * @brief Widget::mouseMoveEvent 77 * @param event 78 */ 79 void Widget::mouseMoveEvent(QMouseEvent *event) 80 91 } 92 93 /** 94 * 窗口移动的位置都是相对于桌面左上角 95 * @brief Widget::mousePressEvent 96 * @param event 97 */ 98 void Widget::mousePressEvent(QMouseEvent *event) 99 103 104 /** 105 * 绘制时钟 106 * @brief Widget::paintEvent 107 * @param event 108 */ 109 void Widget::paintEvent(QPaintEvent *event) 110 ; 117 static const QPoint minuteHand[3]=; 122 static const QPoint secondHand[3]=; 127 QTime time = QTime::currentTime(); 128 129 paint.begin(this); 130 131 paint.setRenderHint(QPainter::Antialiasing,true); 132 paint.translate(this>width()/2,this>height()/2); // 移动坐标 133 134 // 缩放 135 int side = qMin(width(),height()); // 长宽的最小值:定义一个边界 保证是圆形的 136 paint.scale(side /200.0,side/200.0); // 跟随窗口大小发生变化 137 138 // 绘制时针刻度线 139 paint.setPen(Qt::white); 140 for (int i =0; i <12; i++) 144 145 // 绘制分针刻度线 (360 / 60 = 6) 146 for(int j =0; j < 60; j++) 151 paint.rotate(6.0); 152 } 153 154 // 绘制时针 旋转角度 = 小时数 * 30° 155 paint.save(); 156 paint.setBrush(Qt::white); // 设置指针填充色 157 paint.rotate(30.0 * (time.hour() + time.minute() /60.0)); 158 paint.drawConvexPolygon(hourHand,3); 159 paint.restore(); // 还原画笔 160 161 // 绘制分针 旋转角度 = 分钟数 * 6° 162 paint.save(); 1 paint.rotate(6.0 * (time.minute() + time.second() / 60.0)); 164 paint.drawConvexPolygon(minuteHand,3); 165 paint.restore(); // 还原画笔 166 167 // 绘制秒针 旋转角度 = 秒数 * 6° 168 paint.save(); 169 paint.rotate(6.0 * time.second()); 170 paint.drawConvexPolygon(secondHand,3); 171 paint.restore(); // 还原画笔 172 173 paint.end(); 174 } 175 176 /** 177 * 鼠标双击全屏 178 * @brief Widget::mouseDoubleClickEvent 179 * @param event 180 */ 181 void Widget::mouseDoubleClickEvent(QMouseEvent *event) 182 189 else 190 194 }


上一篇:Qt QPushButton 实现保持按下效果 Checkable

下一篇:FileZilla Server 使用教程


Qt
Copyright © 2002-2019 k262电脑网 www.k262.cn 皖ICP备2020016292号
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!QQ:251442993 热门搜索 网站地图