基于QT的时钟表盘设计

基于QT设计根据电脑本地时间的时钟,要求具有时针,分针,秒针,而且根据时间产生对应的偏移

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QDebug>
#include <QTimerEvent>
#include <QTime>
#include <QTimer>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    //重写画家虚函数
    void paintEvent(QPaintEvent *event) override;

private:
    Ui::Widget *ui;
    QTimer *time;
    QTime t;
    int hour;
    int minute;
    int second;
};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //初始化实时绘制时钟连接
      //初始化时钟与画家
    time = new QTimer(this);
    connect(time,&QTimer::timeout,[&](){update();});
    time->start(1000);
}

Widget::~Widget()
{
    delete ui;
}
//定义画板
void Widget::paintEvent(QPaintEvent *event)
{
    //准备画笔
    QPainter p(this);
    p.setPen(Qt::black);
    p.setFont(QFont("楷书",15));
    //偏移画笔到ui中央
    p.translate(this->width()/2,this->height()/2);
    //给刷子上色
    QBrush b(QColor("yellow"));
    p.setBrush(b);
    //画表盘
    p.drawEllipse(QPoint(0,0),180,180);
    //画刻度
       //修改画笔宽度
    p.setPen(QPen(Qt::black,3));
    int j = 6;
    for(int i=0;i < 60;i++)
    {
        //画长短刻度
        if(i%5 == 0)
        {
            p.drawLine(QPoint(0,180),QPoint(1,165));
            p.drawText(QPoint(-9,160),QString::number(j));
            if(j+1 > 12)
                 j = 0;
            j++;
        }else
        {
            p.drawLine(QPoint(0,180),QPoint(1,175));
        }
        p.rotate(6);
    }
    qDebug()<<"hello";
    //获取时间
    t = QTime::currentTime();
    //将时间转换成数值,按数值调整时分秒针
    QString t_s = t.toString("HH:mm:ss");
    QStringList timelist = t_s.split(":");//用:将字符串分割成3部分
    quint8 hour = timelist[0].toUInt();//将字符串转换成无符号整数
    quint8 minute = timelist[1].toUInt();
    quint8 second = timelist[2].toUInt();

    //设置画笔属性
    p.setPen(QPen(Qt::red,9));//时针
    p.rotate(hour*30+6*second/60/12+30*minute/60);
    p.drawLine(QPoint(0,-50),QPoint(0,5));
    p.rotate(-(hour*30+6*second/60/12+30*minute/60));

    p.setPen(QPen(Qt::blue,9));//分针
    p.rotate(6*second/60+6*minute);
    p.drawLine(QPoint(0,-70),QPoint(0,7));
    p.rotate(-(6*second/60+6*minute));

    p.setPen(QPen(Qt::green,9));//秒针
    p.rotate(6*second);
    p.drawLine(QPoint(0,-100),QPoint(0,9));
    qDebug() <<hour<<":"<<minute<<":"<<second;
}

main文件

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

实现效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,基于Qt时钟万年历可以分为两个部分:时钟和万年历。 首先是时钟部分。我们可以使用Qt自带的QTimer类来实现时钟的计时功能,然后通过QLabel控件来展示当前时间。具体实现步骤如下: 1. 在Qt Designer中创建一个界面,添加一个QLabel控件用于显示当前时间。 2. 在mainwindow.h文件中定义一个QTimer成员变量,用于实现定时器功能。 3. 在mainwindow.cpp文件的构造函数中初始化QTimer,并连接到一个槽函数中,用于更新QLabel控件上的时间显示。 4. 在槽函数中使用QDateTime类获取当前时间,并将其转换为字符串,最后更新QLabel控件上的显示内容。 下面是示例代码: mainwindow.h: ```c++ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimer> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void updateTime(); private: Ui::MainWindow *ui; QTimer *timer; }; #endif // MAINWINDOW_H ``` mainwindow.cpp: ```c++ #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDateTime> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 初始化定时器 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); timer->start(1000); // 每隔1秒更新一次时间 } MainWindow::~MainWindow() { delete ui; } void MainWindow::updateTime() { QDateTime currentDateTime = QDateTime::currentDateTime(); QString currentTimeStr = currentDateTime.toString("hh:mm:ss"); ui->label_time->setText(currentTimeStr); } ``` 接下来是万年历部分。我们可以使用QCalendarWidget控件来实现万年历的功能,具体实现步骤如下: 1. 在Qt Designer中添加一个QCalendarWidget控件用于显示万年历。 2. 通过QTabWidget控件来实现时钟和万年历的切换,并在槽函数中根据当前选中的标签来显示对应的内容。 下面是示例代码: mainwindow.h: ```c++ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimer> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void updateTime(); void on_tabWidget_currentChanged(int index); private: Ui::MainWindow *ui; QTimer *timer; }; #endif // MAINWINDOW_H ``` mainwindow.cpp: ```c++ #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDateTime> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 初始化定时器 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); timer->start(1000); // 每隔1秒更新一次时间 // 绑定tab切换事件 connect(ui->tabWidget, SIGNAL(currentChanged(int)), this, SLOT(on_tabWidget_currentChanged(int))); } MainWindow::~MainWindow() { delete ui; } void MainWindow::updateTime() { QDateTime currentDateTime = QDateTime::currentDateTime(); QString currentTimeStr = currentDateTime.toString("hh:mm:ss"); ui->label_time->setText(currentTimeStr); } void MainWindow::on_tabWidget_currentChanged(int index) { if (index == 1) { // 切换到万年历页 ui->calendarWidget->setMaximumDate(QDate(9999, 12, 31)); ui->calendarWidget->setMinimumDate(QDate(1, 1, 1)); } } ``` 这样,我们就实现了一个基于Qt时钟万年历应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值