#include "TwoWaySliderControl.h"
#include <QDebug>
#include <QPainter>
#include <QFont>
#include <QPen>
#include <QMouseEvent>
CTwoWaySliderControl::CTwoWaySliderControl( QWidget* parent )
: QWidget(parent)
{
this->setMouseTracking(true);
m_iHeight =0;
m_iWidth =0;
m_iMinValue =0;
m_iMaxValue =100;
m_iCurMinValue =0;
m_iCurMaxValue =100;
selectType = 0;
leftValue = 0;
rightValue = 0;
}
CTwoWaySliderControl::~CTwoWaySliderControl(void)
{
}
void CTwoWaySliderControl::paintEvent( QPaintEvent* p)
{
QPainter painter(this);
QPen pen;
pen.setColor(QColor(0,0,0));
pen.setWidth(1);
painter.setPen(pen);
painter.drawRect(2,10,m_iWidth-4,m_iHeight-20);
float CurMin = 1.0*m_iCurMinValue/(m_iMaxValue - m_iMinValue) * (m_iWidth -2);
float CurMax = 1.0*m_iCurMaxValue/(m_iMaxValue - m_iMinValue) * (m_iWidth -2);
painter.fillRect(2+CurMin+15,10+1,CurMax-CurMin-15+1,m_iHeight-20-1,Qt::gray);
painter.fillRect(2+CurMin,2,15,m_iHeight-4,Qt::lightGray);
painter.fillRect(2+CurMax-15,2,15,m_iHeight-4,Qt::lightGray);
curMinValueStartPoint.setX(2+CurMin);
curMinValueStartPoint.setY(2);
curMaxValueStartPoint.setX(2+CurMax-15);
curMaxValueStartPoint.setY(2);
painter.end();
}
void CTwoWaySliderControl::mousePressEvent( QMouseEvent *e)
{
setCursor(Qt::PointingHandCursor);
QPoint Lastpoint = e->pos();
bool ret = CheckSelect(Lastpoint,curMinValueStartPoint,15,m_iHeight-4);
if(ret == true)
{
selectType = 1;
return;
}
ret = CheckSelect(Lastpoint,curMaxValueStartPoint,15,m_iHeight-4);
if(ret == true)
{
selectType = 2;
return;
}
QPoint tem = curMinValueStartPoint;
tem.setX(curMinValueStartPoint.x()+15);
ret = CheckSelect(Lastpoint,tem,curMaxValueStartPoint.x()-curMinValueStartPoint.x()-15,m_iHeight-4);
if(ret == true)
{
selectType = 3;
int moveSize = Lastpoint.x();
int temValue = 1.0* moveSize/(m_iWidth -2) * (m_iMaxValue - m_iMinValue);
leftValue = temValue - m_iCurMinValue;
rightValue = m_iCurMaxValue - temValue;
}
}
void CTwoWaySliderControl::mouseMoveEvent( QMouseEvent *e)
{
if(selectType == 0)
{
return;
}
setCursor(Qt::PointingHandCursor);
QPoint curPoint = e->pos();
int moveSize = curPoint.x();
int temValue = 0;
if(selectType == 1)
{
temValue = 1.0* (moveSize-7)/(m_iWidth -2) * (m_iMaxValue - m_iMinValue);
setCurMinValue(temValue);
}
if(selectType == 2)
{
temValue = 1.0* (moveSize+7)/(m_iWidth -2) * (m_iMaxValue - m_iMinValue);
setCurMaxValue(temValue);
}
if(selectType == 3)
{
temValue = 1.0* moveSize/(m_iWidth -2) * (m_iMaxValue - m_iMinValue);
if( m_iMinValue <= temValue - leftValue && temValue - leftValue <= temValue + rightValue && temValue + rightValue <= m_iMaxValue )
{
setCurMinValue(temValue - leftValue);
setCurMaxValue(temValue + rightValue);
}
}
emit sliderMoved(m_iCurMinValue,m_iCurMaxValue);
}
void CTwoWaySliderControl::mouseReleaseEvent( QMouseEvent *e )
{
setCursor(Qt::ArrowCursor);
selectType = 0;
}
void CTwoWaySliderControl::resizeEvent( QResizeEvent *event )
{
m_iHeight = this->height();
m_iWidth = this->width();
}
bool CTwoWaySliderControl::setRange( int min,int max )
{
if( min > max)
{
return false;
}
m_iMinValue = min;
m_iMaxValue = max;
m_iCurMinValue =min;
m_iCurMaxValue =max;
update();
emit rangeChanged(min,max);
return true;
}
int CTwoWaySliderControl::MinValue()
{
return m_iMinValue;
}
int CTwoWaySliderControl::MaxValue()
{
return m_iMaxValue;
}
int CTwoWaySliderControl::CurMinValue()
{
return m_iCurMinValue;
}
int CTwoWaySliderControl::CurMaxValue()
{
return m_iCurMaxValue;
}
bool CTwoWaySliderControl::setCurMaxValue( int value )
{
if(value < m_iCurMinValue || value > m_iMaxValue)
{
return false;
}
m_iCurMaxValue = value;
update();
return true;
}
bool CTwoWaySliderControl::setCurMinValue( int value )
{
if(value < m_iMinValue || value > m_iCurMaxValue)
{
return false;
}
m_iCurMinValue = value;
update();
return true;
}
bool CTwoWaySliderControl::CheckSelect( QPoint curPoint,QPoint startPoint,int width,int height )
{
if( startPoint.x() <= curPoint.x() && curPoint.x() <= startPoint.x()+width )
{
if( startPoint.y() <= curPoint.y() && curPoint.y() <= startPoint.y()+height )
{
return true;
}
}
return false;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
qt双向滑块_横向和纵向.rar (44个子文件)
qt双向滑块_横向和纵向
test
test.sln 878B
Debug
test.pdb 1.35MB
qrc_test.obj 8KB
vc90.idb 683KB
moc_test.obj 65KB
moc_TwoWaySliderBase.obj 52KB
test.ilk 848KB
vc90.pdb 844KB
TwoWaySliderBase.obj 73KB
VerticalSlider.obj 63KB
test.obj 107KB
mt.dep 65B
TwoWaySliderControl.obj 73KB
HorizontalSlider.obj 63KB
BuildLog.htm 19KB
moc_HorizontalSlider.obj 50KB
moc_TwoWaySliderControl.obj 44KB
moc_VerticalSlider.obj 50KB
main.obj 62KB
test.exe.intermediate.manifest 621B
test.exe 76KB
test.suo 17KB
test
test.vcproj.L2EKIGH7E2MNXHY.Administrator.user 1KB
VerticalSlider.h 474B
test.ui 3KB
HorizontalSlider.h 486B
Resources
TwoWaySliderBase.h 1KB
test.cpp 150B
GeneratedFiles
Release
qrc_test.cpp 703B
Debug
moc_VerticalSlider.cpp 2KB
moc_HorizontalSlider.cpp 2KB
moc_TwoWaySliderControl.cpp 3KB
moc_TwoWaySliderBase.cpp 3KB
moc_test.cpp 2KB
ui_test.h 3KB
test.h 264B
test.vcproj 19KB
TwoWaySliderControl.cpp 4KB
test.qrc 64B
VerticalSlider.cpp 2KB
main.cpp 163B
TwoWaySliderControl.h 1KB
TwoWaySliderBase.cpp 4KB
HorizontalSlider.cpp 2KB
共 44 条
- 1
资源评论
13560525556
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功