QLCDNumber 显示样式(例如:电子手表有背景绘图)

QLCDNumbr(带字模样式)

其实网上关于QLcdNumer的文章很多,做这个东西的时候也查了许多文章,但是没有讲我下面的内容所以这是我写这篇blog的原因。把自己知道的分享出来供大家学习相互交流。

说明文章目的:

      项目可能需要电子时钟的样式(这样的产品出来的效果是十分重的),但是QLcdNumber并没有提供这样设置的样式或者接口。如果自己实现或者按照Qt源码实现是有点复杂的,首先计算设置的数值或者字符串计算一些变量值,在Qt源码的实现是通过用绘制多边形进行绘制,整个逻辑也是十分复杂。其实还有一种实现方式是通过贴图的方式进行是比较简单的、但是有一些限制的,当拉伸窗口大小绘图就会出现问题,所以不够完美。

QLCDNumber

QLCDNumber 小部件显示一个数字, 其中有 LCD 类似的数字。
它可以显示一个数字, 只是在任何大小。它可以显示十进制、十六进制、八进制或二进制数字。使用显示 () 插槽可以很容易地连接到数据源, 这会重载以采用任何五参数类型。


成员介绍:

Public Functions

 

QLCDNumber(QWidget *parent = Q_NULLPTR)

 

QLCDNumber(uint numDigits, QWidget *parent = Q_NULLPTR)

 

~QLCDNumber()

bool

checkOverflow(double num) const

bool

checkOverflow(int num) const

int

digitCount() const

int

intValue() const

Mode

mode() const

SegmentStyle

segmentStyle() const

void

setDigitCount(int numDigits)

void

setMode(Mode)

void

setSegmentStyle(SegmentStyle)

bool

smallDecimalPoint() const

double

value() const

效果:

  可以设置字体的前景色、背景色。还有边缘的颜色这里没有贴图、感兴趣的自己可以实操。

实现以及相关重点知识:

1.为了更新窗口拉伸:字体字模相应的变化。

void Widget::updateLayout()
{
    upWid->setGeometry(0,0,this->width(),this->height());
    downWid->setGeometry(0,0,this->width(),this->height());
}

2.核心代码创建设置样式:

void LcdNumber::Init()
{
    m_BottomLcdNumber = new QLCDNumber(this);
    m_TopLcdNumber = new QLCDNumber(this);

    m_TopLcdNumber->setAttribute(Qt::WA_TranslucentBackground, true);
    m_TopLcdNumber->setMode(QLCDNumber::Dec);
    m_TopLcdNumber->setFrameStyle(QFrame::Panel | QFrame::Raised);
    m_TopLcdNumber->setDigitCount(11);
    m_TopLcdNumber->setSegmentStyle(QLCDNumber::Filled);
    m_TopLcdNumber->setBackgroundRole(QPalette::Background);
    m_TopLcdNumber->display(m_Array[m_Digit]);

    m_BottomLcdNumber->setAttribute(Qt::WA_TranslucentBackground, true);
    m_BottomLcdNumber->setMode(QLCDNumber::Dec);
    m_BottomLcdNumber->setFrameStyle(QFrame::Panel | QFrame::Raised);
    m_BottomLcdNumber->setBackgroundRole(QPalette::Background);
    m_BottomLcdNumber->setDigitCount(11);
    m_BottomLcdNumber->setSegmentStyle(QLCDNumber::Filled);

    QPalette lcdp1 = m_BottomLcdNumber->palette();
    lcdp1.setColor(QPalette::Foreground,QColor(qRgb(167,167,167)));
    m_BottomLcdNumber->setPalette(lcdp1);
    m_BottomLcdNumber->display(g_Array[m_Digit]);

    m_BottomLcdNumber->show();
    m_TopLcdNumber->show();

    m_BottomLcdNumber->setGeometry(0,0,this->width(),this->height());
    m_TopLcdNumber->setGeometry(0,0,this->width(),this->height());

    update();
}

demo地址:

显示时钟类已经封装好了。

https://download.csdn.net/download/liuzhezhe111/10626469

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章