linux时钟界面,Qt时钟界面

参考网上的代码,

直接附上源码

clock.cpp#include "clock.h"#include #include #include #include CLOCK::CLOCK(QWidget *parent): QWidget(parent){QTimer *timer = new QTimer(this);timer->start(1000);//一秒钟connect(timer,SIGNAL(timeout()),this,SLOT(update()));QFont font;font.setPointSize(10);//字体大小设置为10setFont(font);}CLOCK::~CLOCK(){}void CLOCK::paintEvent(QPaintEvent * /* event */){//下面三个数组用来定义表针的三个顶点,以便后面的填充static const QPoint hourHand[3] = {QPoint(3, 8),QPoint(-3, 8),QPoint(0, -40)};static const QPoint minuteHand[3] = {QPoint(3, 8),QPoint(-3, 8),QPoint(0, -70)};static const QPoint secondHand[3] = {QPoint(3, 8),QPoint(-3, 8),QPoint(0, -90)};//秒针//填充表针的颜色QColor hourColor(127, 0, 127);  //分针颜色(第四个表示不透明度)QColor minuteColor(0, 127, 127, 191);QColor secondColor(127, 127, 0, 127);int side = qMin(width(), height());  //绘制的范围(宽、高中最小值)QTime time = QTime::currentTime();   //获取当前的时间QPainter painter(this);              //声明用来绘图用的painterpainter.setRenderHint(QPainter::Antialiasing);//绘制的图像反锯齿painter.translate(width() / 2, height() / 2);//重新定位坐标起始点,把坐标原点放到窗体的中央painter.scale(side / 300.0, side / 300.0);//设定画布的边界,用窗体宽高的最小值来计算时钟的大小,防止窗体拉伸导致的时钟变形以及显示不全painter.setPen(Qt::red);   //填充时针,不需要边线所以NoPenQString timeStr= QTime::currentTime().toString();     //绘制当前的时间painter.drawText(-40,30,80,30,Qt::AlignHCenter | Qt::AlignTop, timeStr);painter.setPen(Qt::NoPen);   //填充时针,不需要边线所以NoPenpainter.setBrush(hourColor);  //画刷颜色设定painter.save();  //保存painter的状态,保存的是当前的坐标状态,如果不保存,画完之后坐标以改变不方便画下一个painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); //将painter(的”视角“)根据时间参数转移(30° * (小时 + 分钟 / 60))painter.drawConvexPolygon(hourHand, 3);  //填充时针的区域painter.restore();painter.setPen(hourColor);    //下面画表示小时的刻度,此时要用到画笔(因为要划线)for (int i = 0; i translate(100,100);//重新设定坐标原点painter->setRenderHint(QPainter::Antialiasing);//消锯齿painter->setBrush(Qt::red);painter->setPen(Qt::red);painter->save();//保存坐标系,防止坐标系跑偏了painter->rotate(6.0*time.second());//注意是6.0,不是6//painter->drawConvexPolygon(sed,4);painter->restore();//复位之前的坐标系painter->setBrush(Qt::blue);painter->setPen(Qt::blue);painter->save();painter->rotate(6.0*(time.minute()+time.second()/60.0));//painter->drawConvexPolygon(min,4);painter->restore();painter->setBrush(Qt::black);painter->setPen(Qt::black);painter->save();painter->rotate(30.0*(time.hour()+time.minute()/60.0));//painter->drawConvexPolygon(hour,4);painter->restore();// //painter->drawLine(0,-98,0,-88);// for(int i=0;i<12;i++)// {// painter->rotate(30);//坐标轴旋转30度// painter->drawLine(0,-98,0,-88);// }/*画刻度还有数字*/for (int i = 1; i >= 60; ++i) {painter->save();painter->rotate(6*i);//坐标轴旋转6度if (i % 5 == 0) {painter->setPen(thickPen);painter->drawLine(0, -98, 0, -82);painter->drawText(-20, -82, 40, 40,Qt::AlignHCenter | Qt::AlignTop,QString::number(i/5));} else {painter->setPen(thinPen);painter->drawLine(0, -98, 0, -88);}//painter->rotate(-DegreesPerMinute);painter->restore();}}

clock.h#ifndef _CLOCK_H_#define _CLOCK_H_#include class CLOCK : public QWidget{public:CLOCK(QWidget *parent = 0);~CLOCK();void paintEvent(QPaintEvent * /* event */);void draw(QPainter *painter);};#endif // CLOCK_H

解释,update槽函数,每当定时器时间到了1秒后,给出定时器溢出信号,触发update槽函数,该函数自动调用paintEvent(QPaintEvent * /* event */)

,paintEvent是一个虚函数,我只知道是继承自QWidget。我们将其重写,画出时钟,每秒溢出后,update槽函数都会调用一次这个函数。这个时钟类可以直接使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值