www.qt-ui.com 原創技術文章
我們需要自定義QSpinBox的外觀樣式,QSpinBox內有一個輸入框子控件。
qt自帶的qstyle可以通過派生的方式實現不同風格的控件外觀,但是對於一個應用程序中同一控件有不同外觀,通過派生QStyle就無法達到以上的效果了。
我們也可以通過重載PaintEvent的方式來解決不同效果的展現。
首先我們去除自帶的背景邊框。
UIGQSpinBox::UIGQSpinBox(QWidget* pParent) :
QSpinBox(pParent),
_controlBase(this) { _ctrlImpl = new UIGQSpinBoxImpl(this); setFrame(false); setStyleSheet(""); QPalette palette; palette.setColor(QPalette::Text, style.color); pEdit->setPalette(palette); QFont font; font.setPixelSize(style._font.fontSize); font.setFamily(style._font.fontFamily); pEdit->setFont(font); }
這里通過QPalette可以修改SpinBox的字體和顏色,普通的QLineEdit也可以這么處理。
去掉背景之后就可以在PaintEvent中進行背景重繪了。
void UIGQSpinBox::paintEvent(QPaintEvent * evt) { _ctrlImpl->paintEvent(this, evt); }
這里我們可以完全不用擔心文字會被修改掉,因為文字是作為子控件進行繪制的。
在這里我們可以按自己的要求修改上下按鈕和背景邊框樣式。
更多詳情請瀏覽