QT6 源(90):阅读与注释 LCD显示类 QLCDNumber ,源代码以及属性测试。该类继承于容器框架 QFrame

(1)本类所在的类继承关系如下

在这里插入图片描述

(2)segmentStyle 属性,后俩属性的区别很小 :

在这里插入图片描述
++

在这里插入图片描述

(3) smallDecimalPoint 属性

在这里插入图片描述

(4) 本 LCD 不仅可以展示数字,也可以展示内容是数字的文本,还可以带温度的度数标识

在这里插入图片描述

(5) 关于溢出信号的测试

在这里插入图片描述

(6)本源代码来自于头文件 qlcdnumber . h

#ifndef QLCDNUMBER_H
#define QLCDNUMBER_H

#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qframe.h>

QT_BEGIN_NAMESPACE // 说明本类定义于 QT的全局命名空间里

QT_REQUIRE_CONFIG(lcdnumber);

class QLCDNumberPrivate;

/*
The QLCDNumber widget displays a number with LCD-like digits.

它可以显示几乎任何大小的数字。它可以显示小数、十六进制、八进制或二进制数字。
使用display()槽可以轻松连接到数据源,该槽被重载以接受五种参数类型中的任何一种。
还有用于使用 setMode()更改基数和 setSmallDecimalPoint()更改小数点的位置。
当QLCDNumber被要求显示超出其范围的内容时,它会发出overflow()信号。
范围由setDigitcount()设置,但setSmallDecimalPoint()也会影响它。
如果显示设置为十六进制八进制或二进制,则显示值的整数等效值。

可以显示这些数字和其他符号:0/O、1、2、3、4、5/S、6、7、8、9/g、减号、小数点、
A、B、C、D、EF、h、H、L、0、P、r、u、U、Y、冒号、度数符号(在字符串中指定为单引号)和空格。
QLCDNumber将空格替换为非法字符。
无法检索 QLCDNumber对象的内容,但您可以使用 value()检索数值。
如果您确实需要文本,我们建议您将传递到display()槽的信号也连接到另一个槽,并在那里存储值。
顺便说一下,QLCDNumber是Qt中最古老的部分,它的根源可以追溯到Sinclair Spectrum上的一个BASIC程序。

*/

class Q_WIDGETS_EXPORT QLCDNumber : public QFrame // LCD number widget
{
    Q_OBJECT //插入此宏,以使用 Qt的元对象系统

    //此属性保存显示值,将其四舍五入到最接近的整数。
    //此属性对应于LCDNumber显示的当前值的最近整数。这是十六进制、八进制和二进制模式使用的值。
    //如果显示值不是数字,则该属性的值为0。   默认情况下,此属性包含值为 0。
    Q_PROPERTY(int    intValue   READ intValue   WRITE display)  //±整数

    Q_PROPERTY(Mode   mode       READ mode       WRITE setMode)  //整数的进制 2 8 10 16
    //此属性保存当前显示模式(数字进制)。
    //对应当前的显示模式,这是Bin、Oct、Dec(默认)和Hex模式之一。
    //Dec模式可以显示浮点数,其他模式显示整数等效值。

    //此属性保存显示值。此属性对应于LCDNumber显示的当前值。
    //如果显示值不是数字,则该属性的值为0。 默认情况下,此属性包含值为 0。
    Q_PROPERTY(double value      READ    value   WRITE display)  //浮点数

    Q_PROPERTY(bool   smallDecimalPoint // 此属性为 true 就是表示把小数点小一点来显示。
               READ   smallDecimalPoint WRITE setSmallDecimalPoint) //默认为 false
    //This property holds the style of the decimal point。
    //If true the decimal point is drawn between two digit positions.
    //Otherwise it occupies a digit position of its own,
    //i.e. is drawn in a digit position. The default is false.
    //The inter-digit space is made slightly wider when the
    //      decimal point is drawn between the digits.

    //Returns the current number of digits. 若显示小数点,则小数点始终占据其中的一位
    Q_PROPERTY(int   digitCount  READ digitCount WRITE setDigitCount) //显示总位数

    Q_PROPERTY(SegmentStyle segmentStyle READ segmentStyle WRITE setSegmentStyle)
    //This property holds the style of the LCDNumber。
    //Outline ---- Produces raised segments filled with the background color。
    //              生成填充为背景颜色的凸起部分
    //Filled (this is the default).   ---- 生成填充前景色的凸起部分。
    //        ---- Produces raised segments filled with the foreground color.
    //Flat    ---- Produces flat   segments filled with the foreground color.
    //                                ---- 生成填充前景色的平面片段。

private:
    Q_DISABLE_COPY(QLCDNumber)
    Q_DECLARE_PRIVATE(QLCDNumber)

public:
    //构造一个LCD数字,设置数字位数为5,基数为十进制,小数点模式为“小”,框架样式为凸起框。
    //segmentStyle()被设置为Outline。父类参数传递给 QFrame 构造函数。
    explicit QLCDNumber(QWidget * parent = nullptr);

    explicit QLCDNumber(uint numDigits, QWidget * parent = nullptr);
    //Constructs an LCD number, sets the number of digits to numDigits,
    //the base to decimal, the decimal point mode to 'small' and the
    //frame style to a raised box. The segmentStyle() is set to Filled.
    //The parent argument is passed to the QFrame constructor.

    ~QLCDNumber();

    enum Mode         { Hex, Dec, Oct, Bin };
    Q_ENUM(Mode)

    enum SegmentStyle { Outline, Filled, Flat };
    Q_ENUM(SegmentStyle)


//Q_PROPERTY(int    intValue   READ intValue   WRITE display)  //±整数
            int     intValue()  const; //这是个读函数
public Q_SLOTS:
            void    display(int  num); //这是个写函数

public :
//Q_PROPERTY(Mode     mode       READ  mode    WRITE setMode)  //整数的进制 2 8 10 16
             Mode     mode() const;
             void  setMode(Mode);  //此函数并不是槽函数
public Q_SLOTS:
             void  setHexMode();   //这些不带形参的才是槽函数
             void  setDecMode();
             void  setOctMode();
             void  setBinMode();

public :
//Q_PROPERTY(double   value      READ  value   WRITE display)  //浮点数
             double   value() const;
public Q_SLOTS:
             void     display(double num);

public :
//Q_PROPERTY(bool    smallDecimalPoint // 此属性为 true 就是表示把小数点小一点来显示。
//           READ    smallDecimalPoint WRITE setSmallDecimalPoint) //默认为 false
             bool    smallDecimalPoint() const;
public Q_SLOTS:
             void setSmallDecimalPoint(bool);

public :
//Q_PROPERTY(int     digitCount  READ digitCount WRITE setDigitCount) //显示总位数
             int     digitCount() const;
             void setDigitCount(int nDigits);

//Q_PROPERTY(SegmentStyle    segmentStyle READ segmentStyle WRITE setSegmentStyle)
             SegmentStyle    segmentStyle() const;
                     void setSegmentStyle(SegmentStyle);

    bool checkOverflow(int    num) const;
    bool checkOverflow(double num) const;
    //Returns true if num is too big to be displayed in its entirety;
    //otherwise returns false.

    QSize sizeHint() const override;

public Q_SLOTS:
    //void display(int    num);
    //void display(double num);
    void   display(const QString & str);
    //显示由字符串str表示的数字。 此版本的函数忽路mode()和smallDecimalPoint()
    //可以显示这些数字和其他符号:0/O、1、2、3、4、5/S、6、7、8、9/g、减号、小数点、A、B、C
    //D、E、F、h、H、L、0、P、r、y、U、Y、冒号、度数符号(在字符串中指定为单引号)
    //和空格QLCDNumber将空格替换为非法字符。
    //Displays the number represented by the string s.
    //This version of the function disregards mode() and smallDecimalPoint().
    //These digits and other symbols can be shown: 0/O, 1, 2, 3, 4, 5/S, 6, 7, 8, 9/g,
    //minus, decimal point, A, B, C, D, E, F, h, H, L, o, P, r, u, U, Y, colon,
    //degree sign (which is specified as single quote in the string) and space.
    //QLCDNumber substitutes spaces for illegal characters.

    //以下是另一些槽函数:
    //void setSmallDecimalPoint(bool);
    //void setHexMode();
    //void setDecMode();
    //void setOctMode();
    //void setBinMode();

Q_SIGNALS:
    void overflow();
    //This signal is emitted whenever the QLCDNumber is asked to display a
    //too-large number or a too-long string.

protected:
    bool      event(QEvent      * e) override;
    void paintEvent(QPaintEvent *  ) override;

}; //完结 class QLCDNumber : public QFrame

QT_END_NAMESPACE

#endif // QLCDNUMBER_H

(7)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值