欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 用Qt 中的QPainter类画时钟

用Qt 中的QPainter类画时钟

2024/10/24 10:22:06 来源:https://blog.csdn.net/A185822153/article/details/139643527  浏览:    关键词:用Qt 中的QPainter类画时钟

        在Qt中,我们可以通过QPainter类来绘制各种图形,包括时钟指针。以下是一个简单的例子,展示了如何在Qt中绘制一个简单的时钟指针。

#include <QPainter>
#include <QWidget>
#include <QTimer>
#include <QTime>class ClockWidget : public QWidget {Q_OBJECT
public:ClockWidget(QWidget *parent = nullptr) : QWidget(parent) {timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &ClockWidget::update);timer->start(1000);}protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);drawClockFace(&painter);drawHands(&painter);}void drawClockFace(QPainter *painter) {// 绘制表盘painter->translate(width() / 2, height() / 2);painter->scale(width() / 200.0, height() / 200.0);painter->setPen(Qt::NoPen);painter->setBrush(Qt::black);painter->drawEllipse(QPoint(0, 0), 100, 100);for (int i = 0; i < 12; ++i) {painter->rotate(30);painter->setPen(Qt::white);painter->drawLine(80, 0, 90, 0);painter->rotate(-30);}}void drawHands(QPainter *painter) {QTime time = QTime::currentTime();painter->save();painter->rotate(30.0 * ((time.hour() + time.minute() / 60.0) + time.second() / 3600.0));painter->setPen(Qt::NoPen);painter->setBrush(Qt::red);painter->drawConvexPolygon(QPolygon({QPoint(0, 20), QPoint(5, 10), QPoint(-5, 10)}));painter->restore();painter->save();painter->rotate(6.0 * (time.minute() + time.second() / 60.0));painter->setPen(Qt::NoPen);painter->setBrush(Qt::green);painter->drawConvexPolygon(QPolygon({QPoint(0, 35), QPoint(2, 15), QPoint(-2, 15)}));painter->restore();painter->save();painter->rotate(6.0 * time.second());painter->setPen(Qt::NoPen);painter->setBrush(Qt::blue);painter->drawConvexPolygon(QPolygon({QPoint(0, 45), QPoint(1, 15), QPoint(-1, 15)}));painter->restore();}private:QTimer *timer;
};// 在主函数中使用
int main(int argc, char *argv[]) {QApplication app(argc, argv);ClockWidget clockWidget;clockWidget.resize(200, 200);clockWidget.show();return app.exec();
}

        这段代码定义了一个ClockWidget类,它继承自QWidget。它有一个定时器,每秒触发一次更新事件,然后在paintEvent中重绘时钟表盘和时钟指针。drawClockFace函数用于绘制表盘,drawHands函数用于绘制时针、分针和秒针。程序的主函数中创建了ClockWidget的实例,并显示出来。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com