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