用Qt做一个漂亮的电子时钟(纯代码)

来源:互联网 发布:python 动态生成字典 编辑:程序博客网 时间:2024/04/30 01:40

先看效果图:(帧速设置的有点快,其实是一秒闪一次)

可以用鼠标左键拖拽时钟,也可以点击鼠标右键关闭时钟。



实现步骤:

1、新建GUI应用,项目名称自定,基类选择“QDialog”,取消创建界面复选框。

2、添加提供主要显示界面的函数所在的文件。在“Clock“项目名上单击鼠标右键,在弹出的快捷菜单中选择”添加新文件“。




















3、在弹出的对话框中选择“C++类”,单击”选择“按钮,弹出”C++类向导“对话框。在”BaseClass“下面的下拉列表框中输入基类名”QLCDNumber“,在”类名“后面的文本框中输入类的名称"DigiClock"。

4、单击“下一步”按钮,最后完成创建。添加‘digiclock.h’和“digiclock.cpp”源文件。

5、在"digiclock.h"文件中,添加如下代码:

[cpp] view plain copy
  1. <span style="font-size:14px;">#ifndef DIGICLOCK_H  
  2. #define DIGICLOCK_H  
  3.   
  4. #include <QMouseEvent>  
  5. #include <QLCDNumber>  
  6. #include "digiclock.h"  
  7. class DigiClock : public QLCDNumber  
  8. {  
  9.     Q_OBJECT  
  10.   
  11. public:  
  12.     DigiClock(QWidget *parent=0);  
  13.     void mousePressEvent(QMouseEvent *);  
  14.     void mouseMoveEvent(QMouseEvent *);  
  15.   
  16. public slots:  
  17.     void showTime();  
  18.   
  19. private:  
  20.     QPoint dragPosition;  
  21.     bool showColon;  
  22. };  
  23.   
  24. #endif // DIGICLOCK_H  
  25. </span>  


6、在DigiClock的构造函数中,完成外观的设置,以及定时器的初始化工作。同时在“digiclock.cpp”文件中,完成槽函数showTime(),鼠标按下事件函数mousePressEvent()和鼠标移动事件mouseMoveEvent()。

添加如下代码:

[cpp] view plain copy
  1. <span style="font-size:14px;">#include "digiclock.h"  
  2. #include <QTimer>  
  3. #include <QTime>  
  4. #include <QMouseEvent>  
  5. #include <QDebug>  
  6.   
  7. DigiClock::DigiClock(QWidget *parent)  
  8.     :QLCDNumber(8)  
  9. {  
  10.     QPalette p=palette();  
  11.     p.setColor(QPalette::Window, Qt::blue);  
  12.     setPalette(p);  
  13.   
  14.     setWindowFlags(Qt::FramelessWindowHint);  
  15.   
  16.     setWindowOpacity(0.8);  
  17.   
  18.     QTimer *timer = new QTimer(this);  
  19.     connect(timer , SIGNAL(timeout()) , this , SLOT(showTime()));  
  20.     timer->start(1000);  
  21.     showTime();  
  22.     resize(230,50);  
  23.     showColon = true;  
  24. }  
  25.   
  26. void DigiClock::showTime()  
  27. {  
  28.     QTime time = QTime::currentTime();  
  29.   
  30.     //QTime time1 = QTime::currentTime();  
  31.     QString text = time.toString("hh:mm:ss");  
  32.     if(showColon)  
  33.     {  
  34.         text[2]=':';  
  35.         text[5]=':';  
  36.         showColon=false;  
  37.     }  
  38.     else  
  39.     {  
  40.         text[2]=' ';  
  41.         text[5]=' ';  
  42.         showColon=true;  
  43.     }  
  44.   
  45.     //  qDebug() << text;  
  46.     display(text);  
  47.     //display(QTime::currentTime().toString("hh:mm"));  
  48.   
  49.   
  50. }  
  51.   
  52. void DigiClock::mousePressEvent(QMouseEvent *event)  
  53. {  
  54.     if(event->button() == Qt::LeftButton)  
  55.     {  
  56.         dragPosition = event->globalPos()-frameGeometry().topLeft();  
  57.         event->accept();  
  58.     }  
  59.     if(event->button()==Qt::RightButton)  
  60.     {  
  61.         close();  
  62.     }  
  63. }  
  64.   
  65. void DigiClock::mouseMoveEvent(QMouseEvent *event)  
  66. {  
  67.     if(event->buttons()&Qt::LeftButton)  
  68.     {  
  69.         move(event->globalPos()- dragPosition);  
  70.         event->accept();  
  71.     }  
  72. }  
  73.   
  74. </span>  


7、在主函数中,创建一个DigiClock类的对象,并显示出来。

代码如下:

[cpp] view plain copy
  1. <span style="font-size:14px;">#include "dialog.h"  
  2. #include <QApplication>  
  3. #include "digiclock.h"  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7. //    Dialog w;  
  8. //    w.show();  
  9.   
  10.     DigiClock clock;  
  11.     clock.show();  
  12.   
  13.     return a.exec();  
  14. }  
  15. </span>  

至此,编写时钟的整个流程便完成了。编译运行程序。就可以得到文章开头的运行效果图。
原创粉丝点击