資源簡介
QT自繪滑條控件Slider,可設置橫向和縱向,單滑塊或者雙滑塊
效果圖:https://blog.csdn.net/qq_22723497/article/details/88723666
代碼片段和文件信息
#include?“MySlider.h“
MySlider::MySlider(QWidget?*parent)
:?QWidget(parent)
?m_MinRange(0.00f)
?m_MaxRange(100.00f)
?m_singleStep(0.5f)
?m_curMinValue(0.00f)
?m_curMaxValue(100.00f)
?m_state(None)
?m_lastHandle(None)
?m_Sliderstyle(Single_HorizontalSlider)
?m_Handlestyle(Polygon)
//?m_Handlestyle(Rectangle)
//?m_Handlestyle(Circular)
?m_sliderColor(QColor(46?49?53))
?m_sliderSelectionColor(QColor(154?205?50))
?m_sliderHandleColor(QColor(154?205?50))?
?m_unSliderHandleColor(Qt::darkGray)?
?m_overlapOffset(0)
?m_textBrush(false)
{
setFocusPolicy(Qt::ClickFocus); //設置獲取焦點的方式
}
MySlider::~MySlider()
{
}
void?MySlider::paintEvent(QPaintEvent?*event)
{
QWidget::paintEvent(event);
QPainter?painter(this);
//---?繪制窗口邊框?---//
//painter.drawRect(0?0?width()?-?1?height()?-?1);?
//---?計算坐標?---//
if?(m_Sliderstyle?==?Single_HorizontalSlider?||?m_Sliderstyle?==?Double_HorizontalSlider) //是水平活動條
{
if?(m_Handlestyle?==?Polygon?||?m_Handlestyle?==?Rectangle)
{
m_minX?=?m_curMinValue?*?(width()?-?8)?/?m_MaxRange?+?4; //將當前最小值轉為x坐標
m_maxX?=?m_curMaxValue?*?(width()?-?8)?/?m_MaxRange?+?4; //將當前最大值轉為x坐標
}
else
{
m_minX?=?m_curMinValue?*?(width()?-?12)?/?m_MaxRange?+?6; //將當前最小值轉為x坐標
m_maxX?=?m_curMaxValue?*?(width()?-?12)?/?m_MaxRange?+?6; //將當前最大值轉為x坐標
}
}
else?if?(m_Sliderstyle?==?Single_VerticalSlider?||?m_Sliderstyle?==?Double_VerticalSlider) //是垂直滑動條
{
if?(m_Handlestyle?==?Polygon?||?m_Handlestyle?==?Rectangle)
{
m_minY?=?height()?-?m_curMinValue?*?(height()?-?8)?/?m_MaxRange?-?4; //將當前最小值轉為x坐標
m_maxY?=?height()?-?m_curMaxValue?*?(height()?-?8)?/?m_MaxRange?-?4; //將當前最大值轉為x坐標
}
else
{
m_minY?=?height()?-?m_curMinValue?*?(height()?-?12)?/?m_MaxRange?-?6; //將當前最小值轉為x坐標
m_maxY?=?height()?-?m_curMaxValue?*?(height()?-?12)?/?m_MaxRange?-?6; //將當前最大值轉為x坐標
}
}
//---?繪制槽?---//
paintSlider(&painter);
//---?繪制滑塊?---//
paintHandle(&painter);
//---?繪制當前值?---//
paintText(&painter);
}
void?MySlider::paintSlider(QPainter*?painter)
{
switch?(m_Sliderstyle)
{
case?Single_HorizontalSlider:
paintRectangle(QRect(4?23?width()?-?8?2)?m_sliderColor?painter); //繪制底槽
paintRectangle(QRect(4?23?m_minX?2)?m_sliderSelectionColor?painter); //繪制選中槽
break;
case?Double_HorizontalSlider:
paintRectangle(QRect(4?23?width()?-?8?2)?m_sliderColor?painter);
paintRectangle(QRect(m_minX?23?m_maxX?-?m_minX?2)?m_sliderSelectionColor?painter);
break;
case?Single_VerticalSlider:
paintRectangle(QRect(17?4?2?height()?-?8)?m_sliderColor?painter);
paintRectangle(QRect(17?m_minY?2?height()?-?m_minY?-?4)?m_sliderSelectionColor?painter);
break;
case?Double_VerticalSlider:
paintRectangle(QRect(17?4?2?height()?-?8)?m_sliderColor?painter);
paintRectangle(QRect(17?m_minY?2?m_maxY?-?m_minY)?m_sliderSelectionColor?painter);
break;
default
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3892??2019-03-21?19:06??MySlider.h
?????文件??????17839??2019-03-21?19:12??MySlider.cpp
-----------?---------??----------?-----??----
????????????????21731????????????????????2
評論
共有 條評論