用源码实现QML显示LCD数字

在上一遍文章介绍加载字体库来实现LCD显示数字,本篇介绍使用源码来实现,动手自己写源码。在UI下QLCDNumber控件实现了LCD数字显示,观看该控件的源码,实现自己的LCD数字显示。

首先定义一个类,例如“LCDNumberItem”继承QQuickPaintedItem类。h文件如下所示:主要是仿照QLCDNumber控件

#ifndef LCDNUMBERITEM_H
#define LCDNUMBERITEM_H
 
#include <QtQuick/QQuickPaintedItem>
#include <QBitArray>
class LCDNumberItem :  public QQuickPaintedItem
{
    Q_OBJECT
    Q_PROPERTY(bool smallDecimalPoint READ smallDecimalPoint WRITE setSmallDecimalPoint)
    Q_PROPERTY(int digitCount READ digitCount WRITE setDigitCount)
    Q_PROPERTY(Mode mode READ mode WRITE setMode)
    Q_PROPERTY(SegmentStyle segmentStyle READ segmentStyle WRITE setSegmentStyle)
    Q_PROPERTY(double value READ value WRITE display)
    Q_PROPERTY(int intValue READ intValue WRITE display)
public:
     LCDNumberItem(QQuickItem *parent = 0);
 
     ~LCDNumberItem();
     enum Mode {
         Hex, Dec, Oct, Bin
     };
     Q_ENUM(Mode)
     enum SegmentStyle {
        Outline , Filled, Flat
     };
     Q_ENUM(SegmentStyle)
     bool smallDecimalPoint() const;
     int digitCount() const;
     void setDigitCount(int nDigits);
 
     bool checkOverflow(double num) const;
     bool checkOverflow(int num) const;
 
     Mode mode() const;
     void setMode(Mode);
 
     SegmentStyle segmentStyle() const;
     void setSegmentStyle(SegmentStyle);
 
     double value() const;
     int intValue() const;
     void paint(QPainter *painter);
 
public Q_SLOTS:
    void display(const QString &str);
    void display(int num);
    void display(double num);
    void setHexMode();
    void setDecMode();
    void setOctMode();
    void setBinMode();
    void setSmallDecimalPoint(bool);
signals:
    void overflow();
public slots:
private:
    void init();
    void internalSetString(const QString& s);
    void drawString(const QString& s, QPainter &, QBitArray * = 0, bool = true);
    void drawDigit(const QPoint &, QPainter &, int, char, char = ' ');
    void drawSegment(const QPoint &, char, QPainter &, int, bool = false);
 
private:
    int ndigits;
    double val;
    uint base : 2;
    uint smallPoint : 1;
    uint fill : 1;
    uint shadow : 1;
    QString digitStr;
    QBitArray points;
};
 
#endif // LCDNUMBERITEM_H
 

实现文件基本和QLCDNumber控件差不多,本人还在完善中,争取实现更换颜色。在使用之前要注册一下:

qmlRegisterType<LCDNumberItem>("LCDNumberItem", 1, 0, "LCDNumberItem");

初步显示效果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木士易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值