1.界面效果
2、类的声明
wedgit.h
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget* parent = nullptr); //默认构造函数
~Widget(); //默认析构函数
void timerEvent(QTimerEvent*); //计时器函数
void setTime(int, int, int); //设置时间
void display(); //显示时间
void minusSecond(int); //减去指定秒数
void addSecond(int); //加上指定秒数
void formatTime(); //时间格式化
void stop(); //暂停
void reSet(); //重置回八点
private slots:
void on_buttonBox_accepted(); //减少指定秒数
void on_buttonBox_2_accepted(); //增加指定秒数
void on_buttonBox_3_accepted(); //调用setTime()函数设置时间
void on_pushButton_clicked(); //++
void on_pushButton_2_clicked(); //--
void on_pushButton_3_clicked(); //暂停
void on_pushButton_4_clicked(); //重置
private:
Ui::Widget* ui;
int hour;
int minute;
int second;
int s; //暂停时使用
};
- 使用QT自带函数void timerEvent(QTimerEvent*); 用以加载时间计数器,每一秒刷新一次。同时在ui上添加有个按钮。
- **private slots:**中将ui界面的按钮绑定到功能函数。
- 变量s用以从控制台输入变量将时钟 暂停。
3、各函数的实现
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <qinputdialog.h>
#include <QPushButton>
//默认构造函数
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
this->show();
this->hour=8; //默认对象的时间为:08:00:00
this->minute=0;
this->second=0;
startTimer(1000); //窗口启动一秒后开始计时
this->s=1; //stop值初设为1
this->ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("增加秒数"));//按钮命名
this->ui->buttonBox_2->button(QDialogButtonBox::Ok)->setText(tr("减少秒数"));
this->ui->buttonBox_3->button(QDialogButtonBox::Ok)->setText(tr("设置时间"));
}
//默认析构函数
Widget::~Widget()
{
delete ui;
}
//格式化时间(进制问题处理)
void Widget::formatTime()
{
if (second >= 60||second<0)
{
if(second >= 60)
{
minute += second/60;
second %= 60;
}
if(second < 0)
{
minute += second/60-1;
second = 60 + (second % 60);
}
}
if (minute >= 60||minute<0)
{
if(minute>=60)
{
hour += minute/60;
minute %= 60;
}
if(minute<0)
{
hour += minute/60 - 1;
minute = 60 + ( minute % 60);
}
}
if (hour >= 24||hour<0)
{
hour = 0;
}
}
//暂停函数
void Widget::stop()
{
this->s=!this->s;
}
//重置函数
void Widget::reSet()
{
this->hour=8; //默认对象的时间为:08:00:00
this->minute=0;
this->second=0;
this->display();
}
//定义计时器(刷新用),每一秒一帧&&调用display()函数
void Widget::timerEvent(QTimerEvent *)
{
if(s)
{
display();
this->second++;
}
}
void Widget::setTime(int hour, int minute, int second)
{
this->hour = hour;
this->minute = minute;
this->second = second;
this->display();
}
//显示时间函数
void Widget::display()
{
if(hour>=24||hour<0||minute>=60||minute<0||second>=60||second<0)
formatTime();
QString tempstr = QString("%1:%2:%3") //截取时间
.arg(hour, 2, 10, QChar('0'))
.arg(minute, 2, 10, QChar('0'))
.arg(second, 2, 10, QChar('0'));
ui->aaaa->setText(tempstr);
}
//减去指定秒数
void Widget::minusSecond(int n)
{
this->second -= n;
}
//增加指定秒数
void Widget::addSecond(int n)
{
this->second += n;
}
//增加指定秒数的按钮
void Widget::on_buttonBox_accepted()
{
bool ok;
QString text = QInputDialog::getText(this, tr("修改时间"),tr("请输入增加的秒数"), QLineEdit::Normal,nullptr, &ok);
if (ok && !text.isEmpty())
{
int a=text.toInt();
addSecond(a);
display();
}
}
//减少指定秒数的按钮
void Widget::on_buttonBox_2_accepted()
{
bool ok;
QString text = QInputDialog::getText(this, tr("修改时间"),tr("请输入减少的秒数"), QLineEdit::Normal,nullptr, &ok);
if (ok && !text.isEmpty())
{
int a=text.toInt();
minusSecond(a);
display();
}
}
//设置时间的按钮
void Widget::on_buttonBox_3_accepted()
{
bool ok;
QString text = QInputDialog::getText(this, tr("设置时间"),tr("例如12:09:44输入 120944"), QLineEdit::Normal,nullptr, &ok);
if (ok && !text.isEmpty())
{
QString _hour = text.mid(0, 2);
int hour=_hour.toInt();
QString _minute = text.mid(2, 2);
int minute=_minute.toInt();
QString _second = text.mid(4, 2);
int second=_second.toInt();
setTime(hour, minute, second);
}
}
//只加一秒的按钮
void Widget::on_pushButton_clicked()
{
this->second++;
this->display();
}
//只减一秒的按钮
void Widget::on_pushButton_2_clicked()
{
this->second--;
this->display();
}
//暂停按钮
void Widget::on_pushButton_3_clicked()
{
stop();
this->display();
}
//重置回08:00:00的按钮
void Widget::on_pushButton_4_clicked()
{
reSet();
this->display();
}
4、main函数
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
w.resize(1200,800);
w.setWindowTitle("Clock_B20030211");
return a.exec();
}
5、一点总结
可以学到
- 自定义窗口标题
- 自定义窗口大小
- ui界面的按钮绑定函数信号
- 从控制台获取变量输入
- 相关QT和C++知识
6、评价
写的不好,望大家见谅!