Qt時鐘介面、數字時鐘(12小時制24小時制切換、修改系統時間)
學習Qt之初參照網上資料,然後稍加修改的時鐘介面,介面包含了時鐘、數字時鐘、12小時制和24小時制相互切換並且可以修改系統時間。
以下程式碼為時鐘部分:
clock.h
#include <QWidget>
#include <math.h>
#include <QtGui/QDialog>
#include <QResizeEvent>
#include <QGroupBox>
class Clock : public QWidget
{
Q_OBJECT
public:
Clock(QWidget *parent = 0);
void setTime(QTime);
protected:
//重繪用的事件處理函式
void paintEvent(QPaintEvent *event);
};
clock.cpp
#include <QtGui>
#include "clock.h"
Clock::Clock(QWidget *parent): QWidget(parent)
{ //宣告一個定時器
QTimer *timer = new QTimer(this); //連線訊號與槽
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
//設定窗體名稱與大小
setWindowTitle(tr("Clock"));
resize(400,400);
}
void Clock::setTime(QTime)
{
}
void Clock::paintEvent(QPaintEvent *)
{//刻畫時針、分針、秒針、長刻度、短刻度
static const QPoint hourHand[3] = {
QPoint(5, 14),
QPoint(-5, 14),
QPoint(0, -50)
};
static const QPoint minuteHand[3] = {
QPoint(5, 14),
QPoint(-5,14),
QPoint(0, -70)
};
static const QPoint secondHand[3] = {
QPoint(5, 14),
QPoint(-5, 14),
QPoint(0, -80)
};
static const QPoint line_long[2]={
QPoint(0,100),
QPoint(0,80)
};
static const QPoint line_short[2]={
QPoint(0,100),
QPoint(0,95)
}; //繪製的範圍
int side = qMin(width(), height());
//獲取當前的時間
QTime time = QTime::currentTime();
//宣告用來繪圖用的painter
QPainter painter(this);
//繪製的影像反鋸齒
painter.setRenderHint(QPainter::Antialiasing);
//重新定位座標起始點,把座標原點放到窗體的中央
painter.translate(width() / 2, height() / 2);
//在錶盤內新增文字(任意)
painter.drawText(-75,-120,100,170,Qt::AlignRight,tr("ROLEX"));
//設定畫布的邊界
painter.scale(side / 200.0, side / 200.0);
//填充邊線設為黑色,也可以設定為NoPen
painter.setPen( Qt::black );
//畫刷顏色設定
painter.setBrush(Qt::black);
//儲存painter的狀態
painter.save();
//設定painter的旋轉角度
painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
//填充時針的區域
painter.drawConvexPolygon(hourHand, 3);
painter.restore();
painter.setPen(Qt::black);
//12個個刻度迴圈
for (int i = 0; i < 12; ++i)
{
painter.drawLine(line_long[0],line_long[1]);
painter.rotate(30.0);
}
//繪製分針轉角、刻度
painter.setPen(Qt::black);
painter.setBrush(Qt::black);
painter.save();
painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
painter.drawConvexPolygon(minuteHand, 3);
painter.restore();
painter.setPen(Qt::black);
for (int j = 0; j < 60; ++j)
{
if ((j % 5) != 0)
painter.drawLine(line_short[0],line_short[1]);
painter.rotate(6.0);
}
//繪製分針轉角、刻度
painter.setPen(Qt::black);
painter.setBrush(Qt::black);
painter.save();
painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
painter.drawConvexPolygon(minuteHand, 3);
painter.restore();
painter.setPen(Qt::black);
for (int j = 0; j < 60; ++j)
{
if ((j % 5) != 0)
painter.drawLine(line_short[0],line_short[1]);
painter.rotate(6.0);
}
//繪製秒針轉角
painter.setPen(Qt::black);
painter.setBrush(Qt::black);
painter.save();
painter.rotate(6.0*time.second());
painter.drawConvexPolygon(secondHand,3);
painter.restore();
}
以下程式碼為數字時鐘部分,數字時鐘我做了兩個,鍾一預設24小時制不能調節,鍾二可以上下午的切換變換修改時間:
number.h
#include <QLineEdit>
#include <QLayout>
#include <QLabel>
#include <QComboBox>
#include <QMessageBox>
#include <QDialog>
#include <QSystemTrayIcon>
#include <QLCDNumber>
#include <QTimeEdit>
#include <QTimer>
#include <QTime>
#include <QVariant>
#include <QAction>
#include <qdatetimeedit.h>
#include <QPushButton>
#include"clock.h"
class number:public QLabel
{
Q_OBJECT
public:
number(QWidget *parent=0);
private:
QComboBox *combox;
QGridLayout *layout;
Clock *shi;
QLCDNumber *lcd;//顯示當前時間
QTimeEdit *timed;
QTimer *timer;
QTime time;
QPushButton *bt;
public slots:
void chang(int);
void clockc();
void clocks();
void satime();
};
number.cpp
#include"number.h"
number::number(QWidget *parent):QLabel(parent)
{
combox=new QComboBox;
layout=new QGridLayout;
shi= new Clock();
lcd=new QLCDNumber;
timer=new QTimer;
timed=new QTimeEdit;
bt=new QPushButton("Save");
//鍾一
lcd->setSegmentStyle(QLCDNumber::Flat);
lcd->setNumDigits(8);//顯示八個數字,預設為5個
//顯示格式
lcd->display(QTime::currentTime().toString("hh:mm:ss")); //鍾二
//設定初始顯示的時間和格式
time =QTime::currentTime();
timed->setDisplayFormat("hh:mm:ss AP");
timed->setTime(time);
//設定選擇框12小時制和24小時制
combox->addItem("12 HOUR");
combox->addItem("24HOUR");
combox->setFocusPolicy(Qt::StrongFocus);
timer->start(1000);
//簡單佈局
layout->addWidget(combox,5,3,2,2);
layout->addWidget(shi,2,7,60,60);
layout->addWidget(lcd,8,3,3,3);
layout->addWidget(timed,11,3,2,2);
layout->addWidget(bt,14,3,2,2);
this->setLayout(layout);
//訊號currentIndexChanged 是在單擊選擇框僅當所選內容前後有變化時才會出發此訊號
connect(combox, SIGNAL(currentIndexChanged(int)), this, SLOT(chang(int)));
connect(timer, SIGNAL(timeout()), this, SLOT(clockc()));//鍾一
connect(timed, SIGNAL(timeChanged(QTime)), this, SLOT(clocks()));//鍾二
connect(bt, SIGNAL(clicked()), this, SLOT(satime()));
}
void number::chang(int i)
{//上下午時間的切換
switch(i)
{
case 0:timed->setDisplayFormat(" hh:mm:ss AP");
break;
case 1:timed->setDisplayFormat("hh:mm:ss ");
break;
}
}
void number::clockc()
{
lcd->display(QTime::currentTime().toString("hh:mm:ss"));
time=time.addSecs(1);//使用addSecs()給一個日期增加一個給定的秒數
timed->setTime(time);
shi->repaint();
}
void number::clocks()
{
time=timed->time();
shi->setTime(time);
//重新畫時鐘
shi->repaint();
}
void number::satime()
{//修改系統時間
QDateTime td=QDateTime::currentDateTime ();
td.setTime(timed->time());
time_t time=(time_t)td.toTime_t();
stime(&time);//校對時間
}
main.cpp
#include <QApplication>
#include "number.h"
{
QApplication app(argc, argv);//宣告下,再show出來就可以了
number q;
q.show();
return app.exec();
}
效果:
相關文章
- C++24小時制轉換成12小時制C++
- 視訊直播app原始碼,Android端簡單的時間選擇器(包括12小時制和24小時制)APP原始碼Android
- 匹配十二小時制時間格式
- JS自動生成24小時時間區間,時間跨度為60或30分鐘JS
- win10 時間怎麼設定24小時格式_win10如何設定24小時制Win10
- 手機小技巧:小米手機時間24小時制怎麼設定
- Ubuntu、CentOS修改時區、設定24小時時間格式教程。UbuntuCentOS
- 系統時鐘與硬體時鐘
- 例項QT程式 —— Qt自繪製小時鐘QT
- 實時時鐘、系統時鐘和主機伺服器時鐘的區別伺服器
- JavaScript 原生 小案例 秒殺時鐘倒數計時JavaScript
- JavaScript 天小時分鐘和秒倒數計時JavaScript
- 校驗十二小時制時間正規表示式
- GPS北斗時鐘伺服器(衛星時鐘系統)讓高考時間更加精準伺服器
- Pbootcms將日期時間轉換成"剛剛、幾分鐘、幾小時前"的形式boot
- 校驗二十四小時制時間正規表示式
- 蘋果iPhone XR手機24小時制設定教程 iPhone XR時間怎麼設定?蘋果iPhone
- 匹配二十四小時制時間日期格式正規表示式
- hive如何把時分秒時間變成15分鐘切片時間Hive
- 分散式系統:向量時鐘分散式
- 分散式系統的硬核:時間時鐘問題和演算法分散式演算法
- QT時鐘控制元件顯示QT控制元件
- 時間戳轉化為動態時鐘--moment時間戳
- Clock——時鐘
- 《12 分鐘》GI 前瞻:時間真的能改變一切嗎?
- (大表小技巧)有時候 2 小時的 SQL 操作,可能只要 1 分鐘SQL
- 分散式系統理論基礎3: 時間、時鐘和事件順序分散式事件
- windows系統安裝時間修改,win10修改系統安裝時間WindowsWin10
- JavaScript牛刀小試,結合CSS3動畫屬性來做一個系統時間同步的時鐘JavaScriptCSSS3動畫
- 一小時搞懂Mysql鎖機制MySql
- 北斗GPS同步時鐘(授時系統)技術原理詳解
- 多級時序系統:機器週期,時鐘週期
- 一小時的時間,上手 WebpackWeb
- 論醫院架設NTP時鐘裝置(GPS北斗時鐘系統)重要性
- 網頁時鐘網頁
- Qt學習(5)獲取當前系統時間-實時顯示當前時間QT
- ORACLE計算2個時間段相差時間小時、分、秒Oracle
- 10. 實時鐘系統設計
- 分散式系統:Lamport邏輯時鐘分散式LAMP