#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 #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 #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());
}
|