QT:电子时钟
来源:互联网 发布:三年学java 编辑:程序博客网 时间:2024/04/30 04:16
一、简介
继承自QLCDNumber的类实现电子时钟,并增加程序启动欢迎画面。
二、运行图
(1)启动界面
(2)时钟界面,可以修改程序去掉前面的日期。
三、详解
1、启动欢迎界面
- {
- QPixmap pixmap(":/digitclock.jpg");
- QSplashScreen splash(pixmap);
- splash.show();
-
- app.processEvents();
- DigiClock clock;
- splash.finish(&clock);
- clock.show();
- }
splash.finish(&clock);一般放在DigiClock clock; clock.show();之后表示主程序启动完成后,此处有背景的影响。app.processEvents();通知QT来处理未处理的事件。一般不要执行很长时间的代码放到主线程里,以免造成用户界面冻结。
2、设置定时
先将窗体设置成无标题栏,并设置背景颜色为darkGreen。启动定时0.5秒一次,主要考虑到秒点的运动。
- DigiClock::DigiClock(QWidget *parent)
- : QLCDNumber(parent)
- {
- QTest::qWait(2000);
- QPalette p = palette();
- p.setColor(QPalette::Window,Qt::darkGreen);
- setPalette(p);
-
- setWindowFlags(Qt::FramelessWindowHint);
- setFrameStyle(QFrame::Panel | QFrame::Raised);
- this->setNumDigits(19);
-
- setGeometry(QApplication::desktop()->width() / 2 - 200, QApplication::desktop()->height() / 2 - 25, 400, 50);
-
- QTimer *timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
-
- timer->start(500);
- showTime();
- showColon=true;
- }
setWindowFlags(Qt::FramelessWindowHint);设置样式,setGeometry(QApplication::desktop()->width() / 2 - 200, QApplication::desktop()->height() / 2 - 25, 400, 50);设置程序启动的位置,当然鼠标左键可以移动。timer->start(500);定时500ms。3、显示时间
- void DigiClock::showTime()
- {
- QDateTime time = QDateTime::currentDateTime();
- QString text = time.toString("yyyy-MM-dd hh:MM:ss");
-
- if(showColon) {
- text[16] = ':';
- showColon = false;
- }
- else {
- text[16] = ' ';
- showColon = true;
- }
- display(text);
- }
时间的显示主要在此处控制,time.toString("yyyy-MM-dd hh:MM:ss");控制显示的格式。
4、鼠标左右键
- void DigiClock::mousePressEvent(QMouseEvent * e)
- {
- if (e->button() == Qt::LeftButton) {
- dragPosition = e->globalPos() - frameGeometry().topLeft();
- e->accept();
- }
- if (e->button() == Qt::RightButton) {
- close();
- }
- }
-
- void DigiClock::mouseMoveEvent(QMouseEvent * e)
- {
- if (e->buttons() & Qt::LeftButton) {
- move(e->globalPos() - dragPosition);
- e->accept();
- }
- }
鼠标左键单击不放可以来回移动窗口,右键关闭窗口。