如果要在Qt中实时的显示时间,是不可以在UI线程中直接循环的, 如果在ui线程中直接循环会导致界面卡住,如果要循环的话就不要使用单独的线程,在这里我就用Qt共的定时器来实现"循环显示",就是每隔一段时间去获取系统时间并且显示,如果时间设置的合理也可以实现类似循环的效果
下面是实现的功能效果
Qt定时器类为QTimer
创建QTimer对象并且启动,就会在设置时间类发送timeout信号, 这样就可以定义槽函数关联timeout信号,来获取系统当前时间并且显示
下面是实现代码:(代码有注释)
showsystemtime.h
#ifndef SHOWSYSTEMTIME_H
#define SHOWSYSTEMTIME_H
#include <QMainWindow>
#include <QTimer>//定时器头文件
namespace Ui {
class ShowSystemTime;
}
class ShowSystemTime : public QMainWindow
{
Q_OBJECT
public:
explicit ShowSystemTime(QWidget *parent = 0);
~ShowSystemTime();
private slots:
void on_startBt_clicked();
void on_stopBt_clicked();
//更新时间槽函数
void update_time();
private:
Ui::ShowSystemTime *ui;
QTimer *mtimer;//定义一个定时器指针
};
#endif // SHOWSYSTEMTIME_H
showsystemtime.cpp
#include "showsystemtime.h"
#include "ui_showsystemtime.h"
#include <QTime>
ShowSystemTime::ShowSystemTime(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::ShowSystemTime)
{
ui->setupUi(this);
//初始化定时器
mtimer = new QTimer();
//当定时器启动后会在设定的时间到发生timeout信号
connect(mtimer,SIGNAL(timeout()),this, SLOT(update_time()));
}
ShowSystemTime::~ShowSystemTime()
{
delete ui;
}
//更新显示系统时间
void ShowSystemTime::update_time()
{
//获取系统时间
QString time = QTime::currentTime().toString("hh:mm:ss");
//把系统时间字符串设置在LcdNumber上显示
ui->lcdNumber->display(time);
}
void ShowSystemTime::on_startBt_clicked()
{
//启动定时器
mtimer->start(1000);//设定定时时间为1000毫秒
}
void ShowSystemTime::on_stopBt_clicked()
{
//关闭定时器
mtimer->stop();
}