先看效果图:(帧速设置的有点快,其实是一秒闪一次)
可以用鼠标左键拖拽时钟,也可以点击鼠标右键关闭时钟。
实现步骤:
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(); //QTime time1 = QTime::currentTime(); QString text = time.toString("hh:mm:ss"); if(showColon) { text[2]=':'; text[5]=':'; showColon=false; } else { text[2]=' '; text[5]=' '; showColon=true; } // qDebug() << text; display(text); //display(QTime::currentTime().toString("hh:mm")); } 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>
代码如下:
<span style="font-size:14px;">#include "dialog.h" #include <QApplication> #include "digiclock.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); // Dialog w; // w.show(); DigiClock clock; clock.show(); return a.exec(); } </span>