Qt creator 界面设计 系统运行时间差计算并实时显示

bingqing1 2018-05-14 04:47:59

1.如图,目的是:计算系统已经运行的时间并实时显示在最下面(objectname为interval)的label上

(1)其中生产时间后面的label(objectname为timeLabel)是实时显示目前的系统时间的,是根据时钟变化的(此功能我已经正确实现)

(2)开机时间后面的datetimeEdit显示的是系统的开机时间,是不变的

2.我自己的思路是:获取timeLabel上显示的当前生产时间,并转化为时间戳;
获取datetimeEdit显示的是系统开机时间,并转化为时间戳。
两个时间相减,就得到了系统到目前为止的运行时间。
但是!!忽略了,构建运行这个项目的时候,生产时间和系统开机时间是一同获取的当前windows的时间,所以得到的系统运行时间是0,而且并不能实时的显示。
由于刚刚接触QT,菜鸟一个!!有没有大神指点迷津啊啊啊啊,或者如果可以,能不能直接把这部分的代码帮忙写一下啊
我的代码(没有报错)如下:
Mainwindow.h是:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void timerUpdate(void);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

Mainwindow.cpp是:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QTimer>
#include<Windows.h>
#include<QDebug>
#include<QString>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//生产时间的实时显示(添加信号槽的连接)
QTimer *timer =new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));
timer->start(1000);

//系统开机时间显示
QDateTime datetime=QDateTime(QDateTime::currentDateTime());
ui->dateTimeEdit->setDateTime(datetime);

//系统总运行时间显示
QString starttime0=ui->dateTimeEdit->text();
QDateTime starttime=QDateTime::fromString(starttime0,"yyyy-MM-dd hh:mm:ss"); //获取系统开机时间(即datetimeEdi上的显示时间)
QString endtime0=ui->timeLabel->text();
QDateTime endtime=QDateTime::fromString(endtime0,"yyyy-MM-dd hh:mm:ss"); //获取系统当前时变的生产时间,(即timeLabel上显示的系统实时时间)
uint end=endtime.toTime_t(); // 将时间转为时间戳
uint start=starttime.toTime_t();
int time0=end - start;
QString ti=QString::number(time0,10); //int转化为string,以在interval label上显示
// qDebug() << "etime - stime" << time;
ui->interval->setText(ti);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timerUpdate()
{
QDateTime time =QDateTime::currentDateTime();
QString str=time.toString("yyyy-MM-dd dddd hh:mm:ss");
ui->timeLabel->setText(str);
}
...全文
1676 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
_LinGM 2018-05-15
  • 打赏
  • 举报
回复
要输出动态的东西,肯定需要开个线程或者开个定时器。 最简单就是创建定时器,在定时器里面做时间计算,当前时间-开机时间,再显示。 写个大概的代码思路:(纯手写,格式可能有点别扭) //构造函数里面创建定时器-连接槽-启动定时器 QTimer *timer = new QTimer(); connect(--用timer的timeout信号连接一个自定义槽,暂命名为ShowTime()--); timer->start(1000);//启动定时器,1秒刷新一次 //实现ShowTime,显示运行时间 void showtime() { 运行时间 = 当前时间-开机时间; 显示计算结果; }
bingqing1 2018-05-15
  • 打赏
  • 举报
回复
非常感谢 #1 醍醐灌顶,已经成功完成题目的功能,谢谢啦 开心

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧