Axure的草图
实现这么个界面,那么我们需要怎么做呢,Qt设计师拿出来,拖拖拖
我们暂且叫它:显示定时器功能的可视化界面
这不用多说了吧,就这几个控件,简单的跟个一 一样
.ui文件
DisplayTimerWidget
0
0
283
110
DisplayTimerWidget
-
回波参数设置
-
时长:
-
-
开始
-
倒计时:
-
-
停止
.h文件
/*********************************************************************************
*Author:zhouFuLiang
*Date: 2023-05-09 11:11
*Description: 显示定时器功能的可视化界面
**********************************************************************************/
#ifndef DISPLAYTIMERWIDGET_H
#define DISPLAYTIMERWIDGET_H
#include
#include
namespace Ui {
class DisplayTimerWidget;
}
class DisplayTimerWidget : public QWidget
{
Q_OBJECT
public:
explicit DisplayTimerWidget(const QString &strTitle, QWidget *parent = 0);
~DisplayTimerWidget();
signals:
void writeEchoRegister();
void stopWriteEchoRegister();
public slots:
/*
* @brief 开始按钮的槽函数
* @param
* @param
* @return
*/
void startBtnSlot();
/*
* @brief 自定义定时器槽函数
* @param
* @param
* @return
*/
void updateDefiTimer();
/*
* @brief 秒数定时器 用于更新显示倒计时
* @param
* @param
* @return
*/
void updateTimer();
/*
* @brief 停止按钮槽函数
* @param
* @param
* @return
*/
void stopBtnSlot();
private:
void init();
void initConnect();
/*
* @brief 时间转换秒数
* @param str:时间样式的string
* @param
* @return 秒
*/
int timeStringConverInt(const QString &str);
/*
* @brief 秒数转成时间
* @param nValue 秒数
* @param
* @return 时间类型的String 00:00:00
*/
QString timeIntCoverString(const int &nValue);
private:
Ui::DisplayTimerWidget *ui;
QTimer *m_pDefiTimer;
QTimer *m_pTimer;
int m_currSetValue;
QString m_strTitle;
};
#endif // DISPLAYTIMERWIDGET_H
.cpp文件
#include "displaytimerwidget.h"
#include "ui_displaytimerwidget.h"
#include
#include
DisplayTimerWidget::DisplayTimerWidget(const QString &strTitle, QWidget *parent) :
QWidget(parent),
m_currSetValue(0),
m_strTitle(strTitle),
ui(new Ui::DisplayTimerWidget)
{
ui->setupUi(this);
init();
initConnect();
}
DisplayTimerWidget::~DisplayTimerWidget()
{
delete ui;
}
void DisplayTimerWidget::init()
{
ui->groupBox->setTitle(m_strTitle);
ui->lineEdit->setInputMask("00:00:00");
ui->lineEdit->setCursorPosition(0);
ui->lcdNumber->setDigitCount(8);
ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);
m_pDefiTimer = new QTimer();
m_pDefiTimer->setInterval(100);
m_pTimer = new QTimer();
m_pTimer->setInterval(1000);
}
void DisplayTimerWidget::initConnect()
{
connect(ui->startBt, &QPushButton::clicked, this, &DisplayTimerWidget::startBtnSlot);
connect(m_pDefiTimer, &QTimer::timeout, this, &DisplayTimerWidget::updateDefiTimer);
connect(m_pTimer, &QTimer::timeout, this, &DisplayTimerWidget::updateTimer);
connect(ui->stopBt, &QPushButton::clicked, this, &DisplayTimerWidget::stopBtnSlot);
}
void DisplayTimerWidget::startBtnSlot()
{
if(m_pDefiTimer->isActive()){
m_pDefiTimer->stop();
}
m_currSetValue = timeStringConverInt(ui->lineEdit->text());
ui->lcdNumber->display(timeIntCoverString(m_currSetValue));
if(m_currSetValue == 0)
return;
m_pDefiTimer->start();
m_pTimer->start();
}
void DisplayTimerWidget::updateDefiTimer()
{
emit writeEchoRegister();
}
void DisplayTimerWidget::updateTimer()
{
--m_currSetValue;
//qDebug() << "current value: " << m_currSetValue;
QString strTime = timeIntCoverString(m_currSetValue);
ui->lcdNumber->display(strTime);
if(0 == m_currSetValue){
if(m_pTimer->isActive()){
m_pTimer->stop();
}
if(m_pDefiTimer->isActive()){
m_pDefiTimer->stop();
}
emit stopWriteEchoRegister();
}
}
void DisplayTimerWidget::stopBtnSlot()
{
m_pDefiTimer->stop();
m_pTimer->stop();
ui->lcdNumber->display("0");
emit stopWriteEchoRegister();
}
int DisplayTimerWidget::timeStringConverInt(const QString &str)
{
int nTime = 0;
if(str.isEmpty())
return nTime;
QStringList strList;
strList = str.split(":");
if(strList.size() == 3){
nTime = strList.at(0).toInt()*3600+strList.at(1).toInt()*60+strList.at(2).toInt();
}
return nTime;
}
QString DisplayTimerWidget::timeIntCoverString(const int &nValue)
{
// 传秒数ss=1,传毫秒数ss=1000
qint64 ss = 1;
qint64 mi = ss * 60;
qint64 hh = mi * 60;
qint64 dd = hh * 24;
qint64 day = nValue / dd;
qint64 hour = (nValue - day * dd) / hh;
qint64 minute = (nValue - day * dd - hour * hh) / mi;
qint64 second = (nValue - day * dd - hour * hh - minute * mi) / ss;
QString hou = QString::number(hour, 10);
QString min = QString::number(minute, 10);
QString sec = QString::number(second, 10);
hou = hou.length() == 1 ? QString("0%1").arg(hou) : hou;
min = min.length() == 1 ? QString("0%1").arg(min) : min;
sec = sec.length() == 1 ? QString("0%1").arg(sec) : sec;
return hou + ":" + min + ":" + sec;
}