C++ Qt繪制時鐘界面
更新時間:2021年12月30日 14:03:29 作者:你不懂細節(jié)
大家好,本篇文章主要講的是C++ Qt繪制時鐘界面,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
首先來看一下效果:

大概就是這樣子,需要注意的是,這里你需要創(chuàng)建一個基類為Widget的界面來繪制時鐘,以至于后期你想把這個時鐘放到任意一個界面,你只需要在那個界面的ui里面添加一個widget,然后將它提升為這個時鐘界面,并設定它的大小。
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include<math.h>
#include<QResizeEvent>
#include<QGroupBox>
#include<QTimer>
#include<QTime>
#include<QPainter>
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void paintEvent(QPaintEvent *event);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QTimer *timer = new QTimer(this); //連接信號與槽
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
//設置窗體名稱與大小
setWindowTitle(tr("Clock"));
ui->setupUi(this);
resize(350,350);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
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);
//在表盤內(nèi)添加文字(任意)
//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的狀態(tài)
painter.save();
//設置painter的旋轉(zhuǎn)角度
painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
//填充時針的區(qū)域
painter.drawConvexPolygon(hourHand, 3);
painter.restore();
painter.setPen(Qt::black);
//12個個刻度循環(huán)
for (int i = 0; i < 12; ++i)
{
painter.drawLine(line_long[0],line_long[1]);
painter.rotate(30.0);
}
//繪制分針轉(zhuǎn)角、刻度
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);
}
//繪制分針轉(zhuǎn)角、刻度
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);
}
//繪制秒針轉(zhuǎn)角
painter.setPen(Qt::black);
painter.setBrush(Qt::black);
painter.save();
painter.rotate(6.0*time.second());
painter.drawConvexPolygon(secondHand,3);
painter.restore();
}
main.cpp文件
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
到此這篇關于C++ Qt繪制時鐘界面的文章就介紹到這了,更多相關C++ Qt繪制時鐘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解C++中String類模擬實現(xiàn)以及深拷貝淺拷貝
這篇文章主要介紹了詳解C++中String類模擬實現(xiàn)以及深拷貝淺拷貝的相關資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的方法,需要的朋友可以參考下2017-10-10
詳解C++中的內(nèi)存同步模式(memory order)
這篇文章主要介紹了C++中的內(nèi)存同步模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
解析在Direct2D中畫Bezier曲線的實現(xiàn)方法
本篇文章是對在Direct2D中畫Bezier曲線的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
Qt數(shù)據(jù)庫相關應用開發(fā)總結(jié)
這篇文章主要為大家介紹了在Qt數(shù)據(jù)庫應用開發(fā)中的一些經(jīng)驗總結(jié),以及一些組件的使用介紹。文中的示例代碼講解詳細,需要的可以參考一下2022-02-02

