在 Qt Creator 開發中,常需在 Label 中顯示系統時間,並提供 CheckBox 讓使用者選擇調整「小時」或「分鐘」。點擊按鈕後,根據勾選項對時間的對應部分進行增減操作。時間格式為 yyyy-MM-dd hh:mm:ss dddd,僅需修改 hh 或 mm。
QDateTime::fromString 解析為 QDateTime 物件。addSecs(3600) 或 addSecs(-3600);否則針對分鐘呼叫 addSecs(60) 或 addSecs(-60)。#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:
Ui::MainWindow *ui;
public slots:
void SlotAdd(); // 增加時間
void SlotSub(); // 減少時間
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDateTime>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 假設按鈕名為 pushButton_2 (增加) 和 pushButton_3 (減少)
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(SlotAdd()));
connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(SlotSub()));
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::SlotAdd() {
QString label_string = ui->label->text();
// 解析時間,格式需與 Label 顯示一致
QDateTime label_time = QDateTime::fromString(label_string, "yyyy-MM-dd hh:mm:ss zzz");
if (ui->checkBox->isChecked()) {
// 勾選小時:增加 1 小時 (3600 秒)
label_time = label_time.addSecs(60 * 60);
} else {
// 未勾選:增加 1 分鐘 (60 秒)
label_time = label_time.addSecs(60);
}
ui->label->setText(label_time.toString("yyyy-MM-dd hh:mm:ss zzz"));
}
void MainWindow::SlotSub() {
QString label_string = ui->label->text();
QDateTime label_time = QDateTime::fromString(label_string, "yyyy-MM-dd hh:mm:ss zzz");
if (ui->checkBox->isChecked()) {
// 勾選小時:減少 1 小時
label_time = label_time.addSecs(-60 * 60);
} else {
// 未勾選:減少 1 分鐘
label_time = label_time.addSecs(-60);
}
ui->label->setText(label_time.toString("yyyy-MM-dd hh:mm:ss zzz"));
}
"yyyy-MM-dd hh:mm:ss zzz" 中 zzz 代表毫秒,若不需毫秒可改為 ddd (星期縮寫) 或移除。isChecked() 獲取狀態,靈活控制增減邏輯。
QSpinBox 輸入具體數值。QTimeEdit 替代 Label,提供原生時間編輯體驗。