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)); }
秒针的实现和时针,分针的实现基本一样,就不再写了。
具体的代码和解释请自行到链接里下载。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224253.html原文链接:https://javaforall.net
