Qt:模拟时钟

       Qt中有一个模拟时钟的例题,其主要实现的功能只有时针和分针,以及时钟的那些刻度线。博主在其基础上多增加了秒针,以及数字的显示。同时,对其中小部分进行修改。本例题主要是了解和练习使用QTimer类。本例题属于还是比较简单的,代码量也是很少。具体的代码和解释可以查看git(基本知识点都有注释):“https://github.com/Iconzjy/Qt-Example.git中的analogclock。最终实现效果如图:

本程序先创建一个Non-Qt Project项目,在pro文件内添加QT+=widgets,接着创建main.cpp以及AnalogClock类。一下就先讲解主要的代码。

AnalogClock类的构造函数实现

AnalogClock::AnalogClock(QWidget *parent) : QWidget(parent)
{
    //计时器timer
    QTimer *timer = new QTimer(this);
    //timeout() 是QTimer中的一个私有非静态函数,不能由用户自己发出
    connect (timer, SIGNAL(timeout()), this, SLOT(update()));
    connect (timer, SIGNAL(timeout()), this, SLOT(timeChange()));
    //启动或重新启动计时器,函数参数单位为毫秒,
    timer->start(1000);

    setWindowTitle (tr("Analog Clock"));
    resize (400,200);

    //获取当前时间
    QTime time = QTime::currentTime();
    //设置label的布局
    //具体怎么布局看个人需要了,这里只是简单的显示下。
    QVBoxLayout* layout=new QVBoxLayout;
    QString text = time.toString ();
    label = new QLabel();
    label->setText (text);
    layout->addWidget (label);
    layout->setAlignment (label,Qt::AlignVCenter);
    this->setLayout (layout);

}

其中connect (timer, SIGNAL(timeout()), this, SLOT(timeChange()));的作用是显示数字的时间。效果如图:

 

在虚函数void AnalogClock::paintEvent(QPaintEvent* /*event*/)中,多添加for循环的第三行就可以实现1-12这12个数的显示了。

    //画时钟边界上每5小格的刻度线,设置数字
    for(int i = 0; i < 12; ++i){
        painter.drawLine (0,88,0,96);
        painter.rotate(30.0);
        painter.drawText(-3,-80,tr("%1").arg(i+1));
    }

 

秒针的实现和时针,分针的实现基本一样,就不再写了。

具体的代码和解释请自行到链接里下载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值