目录
时间类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:该窗体没有面板边框和标题栏FramelessWindowHint
setWindowOpacity(0.5); //窗体透明度Opacity:0.5为半透明
//定时器QTimer类
QTimer *timer = new QTimer(this);
//事件关联
connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));
timer->start(1000); //1000ms=1s
showTime(); //初始时间显示
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_OBJECT
public:
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(调试器存在)。
以上编译环境仅供参考。