先看效果图:(帧速设置的有点快,其实是一秒闪一次)
可以用鼠标左键拖拽时钟,也可以点击鼠标右键关闭时钟。
实现步骤:
1、新建GUI应用,项目名称自定,基类选择“QDialog”,取消创建界面复选框。
2、添加提供主要显示界面的函数所在的文件。在“Clock“项目名上单击鼠标右键,在弹出的快捷菜单中选择”添加新文件“。
3、在弹出的对话框中选择“C++类”,单击”选择“按钮,弹出”C++类向导“对话框。在”BaseClass“下面的下拉列表框中输入基类名”QLCDNumber“,在”类名“后面的文本框中输入类的名称"DigiClock"。
4、单击“下一步”按钮,最后完成创建。添加‘digiclock.h’和“digiclock.cpp”源文件。
5、在"digiclock.h"文件中,添加如下代码:
- <span style="font-size:14px;">#ifndef DIGICLOCK_H
- #define DIGICLOCK_H
-
- #include <QMouseEvent>
- #include <QLCDNumber>
- #include "digiclock.h"
- class DigiClock : public QLCDNumber
- {
- Q_OBJECT
-
- public:
- DigiClock(QWidget *parent=0);
- void mousePressEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
-
- public slots:
- void showTime();
-
- private:
- QPoint dragPosition;
- bool showColon;
- };
-
- #endif // DIGICLOCK_H
- </span>
6、在DigiClock的构造函数中,完成外观的设置,以及定时器的初始化工作。同时在“digiclock.cpp”文件中,完成槽函数showTime(),鼠标按下事件函数mousePressEvent()和鼠标移动事件mouseMoveEvent()。
添加如下代码:
- <span style="font-size:14px;">#include "digiclock.h"
- #include <QTimer>
- #include <QTime>
- #include <QMouseEvent>
- #include <QDebug>
-
- DigiClock::DigiClock(QWidget *parent)
- :QLCDNumber(8)
- {
- QPalette p=palette();
- p.setColor(QPalette::Window, Qt::blue);
- setPalette(p);
-
- setWindowFlags(Qt::FramelessWindowHint);
-
- setWindowOpacity(0.8);
-
- QTimer *timer = new QTimer(this);
- connect(timer , SIGNAL(timeout()) , this , SLOT(showTime()));
- timer->start(1000);
- showTime();
- resize(230,50);
- showColon = true;
- }
-
- void DigiClock::showTime()
- {
- QTime time = QTime::currentTime();
-
-
- QString text = time.toString("hh:mm:ss");
- if(showColon)
- {
- text[2]=':';
- text[5]=':';
- showColon=false;
- }
- else
- {
- text[2]=' ';
- text[5]=' ';
- showColon=true;
- }
-
-
- display(text);
-
-
-
- }
-
- void DigiClock::mousePressEvent(QMouseEvent *event)
- {
- if(event->button() == Qt::LeftButton)
- {
- dragPosition = event->globalPos()-frameGeometry().topLeft();
- event->accept();
- }
- if(event->button()==Qt::RightButton)
- {
- close();
- }
- }
-
- void DigiClock::mouseMoveEvent(QMouseEvent *event)
- {
- if(event->buttons()&Qt::LeftButton)
- {
- move(event->globalPos()- dragPosition);
- event->accept();
- }
- }
-
- </span>
7、在主函数中,创建一个DigiClock类的对象,并显示出来。
代码如下:
- <span style="font-size:14px;">#include "dialog.h"
- #include <QApplication>
- #include "digiclock.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
-
-
-
- DigiClock clock;
- clock.show();
-
- return a.exec();
- }
- </span>
至此,编写时钟的整个流程便完成了。编译运行程序。就可以得到文章开头的运行效果图。