QLCDNumbr(带字模样式)
其实网上关于QLcdNumer的文章很多,做这个东西的时候也查了许多文章,但是没有讲我下面的内容所以这是我写这篇blog的原因。把自己知道的分享出来供大家学习相互交流。
说明文章目的:
项目可能需要电子时钟的样式(这样的产品出来的效果是十分重的),但是QLcdNumber并没有提供这样设置的样式或者接口。如果自己实现或者按照Qt源码实现是有点复杂的,首先计算设置的数值或者字符串计算一些变量值,在Qt源码的实现是通过用绘制多边形进行绘制,整个逻辑也是十分复杂。其实还有一种实现方式是通过贴图的方式进行是比较简单的、但是有一些限制的,当拉伸窗口大小绘图就会出现问题,所以不够完美。
QLCDNumber
QLCDNumber 小部件显示一个数字, 其中有 LCD 类似的数字。
它可以显示一个数字, 只是在任何大小。它可以显示十进制、十六进制、八进制或二进制数字。使用显示 () 插槽可以很容易地连接到数据源, 这会重载以采用任何五参数类型。
成员介绍:
QLCDNumber(QWidget *parent = Q_NULLPTR) |
|
QLCDNumber(uint numDigits, QWidget *parent = Q_NULLPTR) |
|
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