Qwt 使用QwtDial绘制钟表

1.概述

QwtDial是Qwt库中的一个类,用于绘制一个可旋转的仪表盘,QwtAnalogClock继承自QwtDial,

模拟时钟。

以下是类继承关系:

2.运行结果

自定义Clock类,继承自QwtAnalogClock,增加一个QTimer,每隔1s更新时间。

cpp 复制代码
    QTimer* timer = new QTimer( this );
    timer->connect( timer, SIGNAL(timeout()), this, SLOT(setCurrentTime()) );
    timer->start( 1000 );
cpp 复制代码
#ifndef CLOCK_H
#define CLOCK_H

#include <QWidget>
#include <QTimer>
#include "qwt_analog_clock.h"
#include "qwt_dial_needle.h"

class Clock : public QwtAnalogClock
{
public:
    Clock( QWidget* parent = NULL );
};

#endif // CLOCK_H


#include "Clock.h"

Clock::Clock( QWidget* parent )
    : QwtAnalogClock( parent )
{
    const QColor knobColor = QColor( Qt::gray ).lighter( 130 );

    for ( int i = 0; i < QwtAnalogClock::NHands; i++ )
    {
        QColor handColor = QColor( Qt::gray ).lighter( 150 );
        int width = 8;

        if ( i == QwtAnalogClock::SecondHand )
        {
            handColor = Qt::gray;
            width = 5;
        }

        QwtDialSimpleNeedle* hand = new QwtDialSimpleNeedle(
            QwtDialSimpleNeedle::Arrow, true, handColor, knobColor );
        hand->setWidth( width );

        setHand( static_cast< QwtAnalogClock::Hand >( i ), hand );
    }

    QTimer* timer = new QTimer( this );
    timer->connect( timer, SIGNAL(timeout()), this, SLOT(setCurrentTime()) );
    timer->start( 1000 );
}

使用:

cpp 复制代码
#include "ClockWidget.h"
#include "ui_ClockWidget.h"
#include "Clock.h"


static QPalette colorTheme( const QColor& base )
{
    QPalette palette;
    palette.setColor( QPalette::Base, base );
    palette.setColor( QPalette::Window, base.darker( 150 ) );
    palette.setColor( QPalette::Mid, base.darker( 110 ) );
    palette.setColor( QPalette::Light, base.lighter( 170 ) );
    palette.setColor( QPalette::Dark, base.darker( 170 ) );
    palette.setColor( QPalette::Text, base.darker( 200 ).lighter( 800 ) );
    palette.setColor( QPalette::WindowText, base.darker( 200 ) );

    return palette;
}


static Clock *g_clock = nullptr;

ClockWidget::ClockWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ClockWidget)
{
    ui->setupUi(this);

    setAutoFillBackground( true );

    setPalette( colorTheme( QColor( Qt::darkGray ).darker( 150 ) ) );

    g_clock = new Clock(this);
    ui->verticalLayout->addWidget(g_clock);
}

ClockWidget::~ClockWidget()
{
    delete ui;
}

3.相关推荐

Qwt 使用QwtDial绘制汽车仪表盘-CSDN博客

相关推荐
charlie11451419135 分钟前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
醇醛酸醚酮酯2 小时前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
Mr_Xuhhh3 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构
灵性花火5 小时前
Qt的前端和后端过于耦合(0/7)
开发语言·前端·qt
菜鸟看点14 小时前
自定义Cereal XML输出容器节点
c++·qt
漫步企鹅15 小时前
【蓝牙】Linux Qt4查看已经配对的蓝牙信息
linux·qt·蓝牙·配对
new_zhou15 小时前
Windows qt打包编译好的程序
开发语言·windows·qt·打包程序
看到我,请让我去学习1 天前
Qt编程-qml操作(js,c++,canvas)
开发语言·qt
哈市雪花1 天前
相机:Camera原理讲解(使用OpenGL+QT开发三维CAD)
qt·3d·交互·相机·图形学·opengl·视角
津津有味道1 天前
Qt C++串口SerialPort通讯发送指令读写NFC M1卡
linux·c++·qt·串口通信·serial·m1·nfc