• 大小: 5KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-27
  • 语言: 其他
  • 标签: QT  C++  自绘控件  

资源简介

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


评论

共有 条评论