QT2nd


Timecaculatorplus

#ifndef TIMEC_H
#define TIMEC_H
#include <QCoreApplication>
#include <QTextStream>
#include <QString>

class Time
{
private:
int Hour;
int Minute;
int Second;
public:
Time();
Time(int h, int m, int s);
void AddTime(Time& t);
QString toString() const;
bool setInput(const QString& timeStr);
int getHour() const { return Hour; }
int getMinute() const { return Minute; }
int getSecond() const { return Second; }
};

#endif // TIMEC_H
#ifndef WIDGET_H
#define WIDGET_H
#include "timec.h"
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
Q_OBJECT

public:
Widget(QWidget *parent = nullptr);
~Widget();

private slots:


void on_ClearpushButton_clicked();

void on_ClosepushButton_clicked();

void on_AddButton_clicked();

void on_SetButton_clicked();

private:
Ui::Widget *ui;
QString expression;
Time T;
};
#endif // WIDGET_H
#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
#include "timec.h"

Time::Time():Hour(0),Minute(0),Second(0)
{

}
Time::Time(int h, int m, int s)
{
Hour = h;
Minute = m;
Second = s;
}


void Time::AddTime(Time& t)
{
int totalSeconds = (Hour * 3600 + Minute * 60 + Second) + (t.Hour * 3600 + t.Minute * 60 + t.Second);
Hour = totalSeconds / 3600;
totalSeconds %= 3600;
Minute = totalSeconds / 60;
Second = totalSeconds % 60;
}
QString Time::toString() const
{
return QString::asprintf("%02d:%02d:%02d", Hour, Minute, Second);
}
bool Time::setInput(const QString& timeStr)
{
QStringList parts = timeStr.split(':');
if (parts.size() != 3) {
return false;
}

bool ok;
Hour = parts[0].toInt(&ok);
if (!ok || Hour < 0 || Hour > 23) return false;

Minute = parts[1].toInt(&ok);
if (!ok || Minute < 0 || Minute > 59) return false;

Second = parts[2].toInt(&ok);
if (!ok || Second < 0 || Second > 59) return false;

return true;
}
#include "widget.h"
#include "ui_widget.h"
#include "timec.h"
#include <QTime>
#include <QMessageBox>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}

Widget::~Widget()
{
delete ui;
}



void Widget::on_ClearpushButton_clicked()
{
expression.clear();
ui->mainEdit->clear();
ui->timeEdit->clear();
ui->addEdit->clear();
}


void Widget::on_ClosepushButton_clicked()
{
this->close();
}


void Widget::on_AddButton_clicked()
{
QString current_time_str = ui->mainEdit->text().trimmed();
if (current_time_str.isEmpty()) {
QMessageBox::warning(this, "错误", "请先设置当前时间");
return;
}

Time current_time;
if (!current_time.setInput(current_time_str)) {
QMessageBox::warning(this, "错误", "当前时间格式无效");
return;
}

QString add_time_str = ui->addEdit->text().trimmed();
if (add_time_str.isEmpty()) {
QMessageBox::warning(this, "错误", "请输入要添加的时间");
return;
}

Time add_time;
if (!add_time.setInput(add_time_str)) {
QMessageBox::warning(this, "无效输入", "请输入正确的时间格式(HH:MM:SS)");
ui->timeEdit->clear();
return;
}
current_time.AddTime(add_time);
ui->mainEdit->setText(current_time.toString());
}


void Widget::on_SetButton_clicked()
{
QString timeStr = ui->timeEdit->text().trimmed();

if (timeStr.isEmpty()) {
ui->mainEdit->clear();
return;
}
Time current;
if (!current.setInput(timeStr)) {
QMessageBox::warning(this, "无效输入", "请输入正确的时间格式(HH:MM:SS)");
ui->timeEdit->clear();
ui->mainEdit->clear();
return;
}

ui->mainEdit->setText(current.toString());

}

无需多言(

emmm,没写注释

kimi启动

这段代码是一个简单的 Qt 应用程序的一部分,主要用于处理时间的输入、验证和计算。以下是代码的详细解析:

功能概述

  1. **添加时间功能 (on_AddButton_clicked)**:

    • 从两个文本框中获取时间字符串。
    • 验证时间格式是否正确。
    • 如果格式正确,将两个时间相加,并将结果显示在主文本框中。
  2. **设置时间功能 (on_SetButton_clicked)**:

    • 从一个文本框中获取时间字符串。
    • 验证时间格式是否正确。
    • 如果格式正确,将结果显示在主文本框中。

代码解析

1. 添加时间功能 (on_AddButton_clicked)

void Widget::on_AddButton_clicked()
{
// 获取主文本框中的当前时间字符串,并去除首尾空格
QString current_time_str = ui->mainEdit->text().trimmed();

// 检查当前时间是否为空
if (current_time_str.isEmpty()) {
QMessageBox::warning(this, "错误", "请先设置当前时间");
return;
}

// 创建 Time 对象并设置当前时间
Time current_time;
if (!current_time.setInput(current_time_str)) {
QMessageBox::warning(this, "错误", "当前时间格式无效");
return;
}

// 获取要添加的时间字符串,并去除首尾空格
QString add_time_str = ui->addEdit->text().trimmed();

// 检查要添加的时间是否为空
if (add_time_str.isEmpty()) {
QMessageBox::warning(this, "错误", "请输入要添加的时间");
return;
}

// 创建 Time 对象并设置要添加的时间
Time add_time;
if (!add_time.setInput(add_time_str)) {
QMessageBox::warning(this, "无效输入", "请输入正确的时间格式(HH:MM:SS)");
ui->addEdit->clear(); // 清空无效输入
return;
}

// 将当前时间和要添加的时间相加
current_time.AddTime(add_time);

// 将结果显示在主文本框中
ui->mainEdit->setText(current_time.toString());
}

2. 设置时间功能 (on_SetButton_clicked)

void Widget::on_SetButton_clicked()
{
// 获取时间设置文本框中的时间字符串,并去除首尾空格
QString timeStr = ui->timeEdit->text().trimmed();

// 检查时间字符串是否为空
if (timeStr.isEmpty()) {
ui->mainEdit->clear(); // 清空主文本框
return;
}

// 创建 Time 对象并设置时间
Time current;
if (!current.setInput(timeStr)) {
QMessageBox::warning(this, "无效输入", "请输入正确的时间格式(HH:MM:SS)");
ui->timeEdit->clear(); // 清空无效输入
ui->mainEdit->clear(); // 清空主文本框
return;
}

// 将结果显示在主文本框中
ui->mainEdit->setText(current.toString());
}

代码逻辑分析

  1. 输入验证

    • 每次从文本框获取时间字符串后,都会检查是否为空。
    • 使用 trimmed() 方法去除首尾空格,避免因多余空格导致的格式错误。
    • 使用 Time 类的 setInput 方法验证时间格式是否正确。
  2. 错误处理

    • 如果输入的时间格式无效,会弹出警告框提示用户,并清空无效的输入框。
  3. 时间计算

    • 使用 Time 类的 AddTime 方法将两个时间相加。
    • 最终结果通过 toString 方法格式化为字符串显示在主文本框中。

这段代码是一个 Time 类的成员函数 setInput,用于验证和设置时间字符串。以下是代码的详细解析:

功能概述

setInput 函数的作用是:

  1. 接收一个时间格式的字符串(如 “HH:MM:SS”)。
  2. 验证字符串是否符合时间格式。
  3. 如果格式正确,将时间解析为小时、分钟和秒,并存储到类的成员变量中。
  4. 返回一个布尔值,表示设置是否成功。

代码解析

bool Time::setInput(const QString& timeStr)
{
// 将时间字符串按冒号分割成部分
QStringList parts = timeStr.split(':');

// 检查分割后的部分数量是否为3(小时、分钟、秒)
if (parts.size() != 3) {
return false; // 如果不是3部分,格式无效
}

bool ok;

// 解析小时部分
Hour = parts[0].toInt(&ok);
if (!ok || Hour < 0 || Hour > 23) return false; // 检查是否为有效整数且在0-23范围内

// 解析分钟部分
Minute = parts[1].toInt(&ok);
if (!ok || Minute < 0 || Minute > 59) return false; // 检查是否为有效整数且在0-59范围内

// 解析秒部分
Second = parts[2].toInt(&ok);
if (!ok || Second < 0 || Second > 59) return false; // 检查是否为有效整数且在0-59范围内

// 如果所有部分都有效,返回true
return true;
}

代码逻辑分析

  1. 字符串分割

    • 使用 split(':') 方法将时间字符串按冒号分割成三部分。
    • 例如,输入 “12:34:56” 会分割成 ["12", "34", "56"]
  2. 检查分割结果

    • 如果分割后的部分数量不是 3,说明格式不符合 “HH:MM:SS”,直接返回 false
  3. 解析和验证每部分

    • 使用 toInt(&ok) 方法将字符串部分转换为整数,并检查转换是否成功。
    • 验证每部分的数值范围:
      • 小时必须在 0-23 之间。
      • 分钟和秒必须在 0-59 之间。
  4. 返回结果

    • 如果所有部分都有效,返回 true
    • 如果有任何部分无效,返回 false

最后看一下效果吧!


Author: T1g3r
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source T1g3r !
评论
  TOC