Qt将RTC设置为主机并显示在QLabel上,而我的QLabel显示QDateTime :: currentDateTime()

时间:2018-12-19 06:49:04

标签: c++ qt qt5

我想获取RTC并通过标签或其他Qt对象显示在Ui上。

当我单击RTC_Get_Time_Button时,它将发送命令,然后固件将发送回列表,例如:

0x20年[15:8]年[7:0]月份[7:0]天[7:0]小时[7:0]分钟[7:0]秒[7:0] 0x00和Second [7:0]都是一个字节。

如果RTC是2013 Sep 24 15:15:15 当我单击RTC_Get_Time_Button时,它将返回 0x20 0x07 0x0d 0x09 0x18 0x0f 0x0f 0x0f

我想获取小时[7:0]分钟[7:0]秒[7:0]数据并显示在我的label_Time上 也许这个运行时钟hh:mm:ss 我的代码就像:

//MainWindow.h
#include <QMainWindow>
#include <QSerialPort>
#include <QDateTime>
#include <qprocess.h>
QT_BEGIN_NAMESPACE

class QLabel;

namespace Ui {
class MainWindow;
}

QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    //void openSerialPort();
    //void closeSerialPort();
    void updateTime();//Update label_Time and 
private:
    void initActionsConnections();
    Ui::MainWindow *m_ui = nullptr;
    QLabel *m_status = nullptr;
    SettingsDialog *m_settings = nullptr;
    QSerialPort *m_serial = nullptr;
    QTimer *timer;
    QDateTime time;
    QDateTime RTCtime;
    QByteArray rsht;
    QByteArray rgt;
    int16_t RTC_Year_H;
    int16_t RTC_Year_L;
    int16_t RTC_Month;
    int16_t RTC_Day;
    int16_t RTC_Hour;
    int16_t RTC_Minute;
    int16_t RTC_Second;

//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QTimer>
#include <QTime>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    m_ui(new Ui::MainWindow),
    m_status(new QLabel),
    m_serial(new QSerialPort(this))
{
    m_ui->setupUi(this);
    timer=new QTimer(this);
    QObject::connect(timer,SIGNAL(timeout()),this,SLOT(updateTime()));
    timer->start(1000);
    time = QDateTime::currentDateTime();
    RTCtime=QDateTime::currentDateTime();
}
void MainWindow::updateTime()
{
    m_ui->label_Time->setText(QTime::currentTime().toString("hh:mm:ss"));
    m_ui->label_RTC_Time->setText(QTime::currentTime().toString("hh:mm:ss"));
}

void MainWindow::on_RTC_Get_Time_Button_clicked()
{
    rgt.clear();
    rgt.append(0xAA);
    rgt.append(0x22);
    rgt.append(static_cast<char>(0x00));
    rgt.append(0xC3);
    m_serial->write(rgt);
    rsht.clear();
    rsht=m_serial->readAll();
}
void MainWindow::on_RTC_Set_Host_Time_Button_clicked()
{
    rsht[1]=RTC_Year_H;
    rsht[2]=RTC_Year_L;
    rsht[3]=RTC_Month;
    rsht[4]=RTC_Day;
    rsht[5]=RTC_Hour;
    rsht[6]=RTC_Minute;
    rsht[7]=RTC_Second;
    m_ui->label_RTC_Time->setText(QTime(RTC_Hour, RTC_Minute, RTC_Second).toString("hh:mm:ss"));

}

我如何显示Hour [7:0]:Minute [7:0]:Second [7:0]喜欢

m_ui->label_Time->setText(QTime::currentTime().toString("hh:mm:ss"));

如何实现?

1 个答案:

答案 0 :(得分:0)

如果日期和时间已经分开,则可以创建QTimeQDate)实例并将其转换为QString

m_ui->label_Time->setText(QTime(RTC_Hour, RTC_Minute, RTC_Second).toString("hh:mm:ss"));

或者您只能输出没有QTime实例的字符串

m_ui->label_Time->setText(QString("%1:%2:%3").arg(RTC_Hour).arg(RTC_Minute).arg(RTC_Second));

我认为第一个变体更好,因为QTime

中的内部验证