目录
时间类QTime/QTimer 20210119
实例:电子时钟
代码及详细解释如下:
【digiclock.cpp】
【digiclock.h】
【main.cpp】
备注Configure Project
时间类QTime/QTimer 20210119
QTime的currentTime(); //获取当前的系统时间
QTime的toString("hh:mm:ss A"); //将获取的当前时间转换为字符串类型 hh:mm:ss A 表示21:11:06 PM; H:mm:s a 表示9:11:6 pm
实例:电子时钟
新建:Qt Widgets Application
项目名称:Clock
类名:Dialog
基类:QDialog
不选择“创建界面”。
然后,添加C++ Class,类名:DigiClock,基类:<Custom> QLCDNumber
最终效果如下:

代码及详细解释如下:
【digiclock.cpp】
#include "digiclock.h"#include <QTimer>
#include <QTime>
#include <QMouseEvent>DigiClock::DigiClock(QWidget *parent):QLCDNumber(parent)
{//设置时钟背景色 //三句话QPalette p = palette(); //获取调色板信息p.setColor(QPalette::Window,Qt::blue); //设置前景色setPalette(p);setWindowFlags(Qt::FramelessWindowHint);//设置窗体标识Flags:该窗体没有面板边框和标题栏FramelessWindowHintsetWindowOpacity(0.5); //窗体透明度Opacity:0.5为半透明//定时器QTimer类QTimer *timer = new QTimer(this);//事件关联connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));timer->start(1000); //1000ms=1sshowTime(); //初始时间显示resize(150,60); //电子时钟显示尺寸showColon = true; //初始化冒号显示标志
}void DigiClock::showTime()
{QTime time = QTime::currentTime();QString text = time.toString("hh:mm");if(showColon){text[2]=':'; //不用双引号showColon = false;}else{text[2]=' ';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);//move()指的是窗体左上角的位置event->accept();}
}
【digiclock.h】
#ifndef DIGICLOCK_H
#define DIGICLOCK_H#include <QLCDNumber>class DigiClock : public QLCDNumber
{Q_OBJECTpublic:DigiClock(QWidget *parent = 0);void mousePressEvent(QMouseEvent *);void mouseMoveEvent(QMouseEvent *);private slots:void showTime();private:bool showColon;QPoint dragPosition;//偏移量:鼠标当前位置相对窗体左上角的偏移量
};
#endif // DIGICLOCK_H
【main.cpp】
#include "dialog.h" //使用哪个类就必须把包含该类的头文件引用过来(*.h文件中包含了相应类的定义)#include <QApplication> //每个使用[Qt图形化应用程序]中都必须使用一个QApplication对象//QApplication管理各种各样的图形化应用程序的广泛资源、基本设置、控制流及事件处理等#include "digiclock.h"int main(int argc, char *argv[]) //这里是应用程序的入口。几乎所有使用Qt的情况下,main()函数只需在将控制转交给Qt库之前执行初始化,然后Qt库通过事件向程序告知用户的行为。//所有Qt程序必须有且只有一个main()函数。argc是命令行变量的数量,argv是命令行变量的数组。
{QApplication a(argc, argv); // a是创建的QApplication类的对象,用来处理命令行变量。所有被Qt识别的命令行参数都将从argv中移去,argc也因此减少DigiClock w; //创建DigiClock类的对象(包含该类头文件)w.show(); //窗口部件可见return a.exec(); //main()函数将控制权交给Qt,Qt完成事件处理工作,当应用程序退出的时候,exec()函数的值就会返回。//exec()函数中,Qt接收并处理用户和系统的事件,并且将他们传递给适当的窗口部件。
}
备注Configure Project
中标麒麟系统下编译文件文件夹为:build-Clock-unknown-Debug
Windows系统下编译文件文件夹为:xxx\build-Clock-Desktop_Qt_5_10_1_MinGW_32bit-Debug
Windows系统下,一定要选好工程配置参数(Configure Project),像我所使用的Qt就不能选用Desktop Qt 5.10.1 MSVC 64bit(No Debugger无调试器),而要选用Desktop Qt 5.10.1 MinGW 32bit(调试器存在)。


以上编译环境仅供参考。















