温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++中Qt如何绘制时钟界面

发布时间:2021-12-30 16:05:49 来源:亿速云 阅读:226 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关C++中Qt如何绘制时钟界面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

首先来看一下效果:

C++中Qt如何绘制时钟界面

大概就是这样子,需要注意的是,这里你需要创建一个基类为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);     //在表盘内添加文字(任意)     //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();   }

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如何绘制时钟界面”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI