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

 

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