添加遥控器,修改遥控器相关链接方式
This commit is contained in:
@@ -0,0 +1,258 @@
|
||||
#include "switch.h"
|
||||
|
||||
Switch::Switch(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
setMinimumSize(QSize(1, 1));
|
||||
resize(20, 40);
|
||||
|
||||
}
|
||||
|
||||
Switch::~Switch()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int16_t Switch::Limit(int16_t pos, int16_t min, int16_t max)
|
||||
{
|
||||
return ( pos <= min)?(min):((pos >= max)?(max):(pos));
|
||||
}
|
||||
|
||||
void Switch::setRecovery(bool state)
|
||||
{
|
||||
Recovery = state;
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::setSwitchdir(uint8_t value)
|
||||
{
|
||||
if(value == 0x00)
|
||||
{
|
||||
resize(this->width(), this->height());
|
||||
}
|
||||
else
|
||||
{
|
||||
resize(this->height(), this->width());
|
||||
}
|
||||
|
||||
m_switchdir = value;
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::setNotice(uint16_t pos,QString str)
|
||||
{
|
||||
Notice.insert(pos,str);
|
||||
}
|
||||
|
||||
void Switch::setSegment(uint16_t value)
|
||||
{
|
||||
float size_step = 0;
|
||||
size_step = (float)size().height() / m_segment;
|
||||
|
||||
resize(size().width(),value * size_step);
|
||||
|
||||
//qDebug() << value << size();
|
||||
m_segment = value;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::setPosition(uint16_t pos)
|
||||
{
|
||||
m_position = Limit(pos,0,m_segment-1);
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::setValue(uint16_t value)
|
||||
{
|
||||
|
||||
m_channel = Limit(value,m_min,m_max);
|
||||
//m_position = (float)(m_channel - m_min) * (m_segment - 1) / (m_max - m_min);
|
||||
|
||||
//qDebug() << (m_max - m_min)/m_segment;
|
||||
|
||||
for(int i = 1;i<=m_segment;i++)
|
||||
{
|
||||
if(i<(m_segment))
|
||||
{
|
||||
if((m_channel - m_min) <= (((m_max - m_min)/m_segment)*i))
|
||||
{
|
||||
m_position = i-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if((m_channel - m_min) > (((m_max - m_min)/m_segment)*i))
|
||||
{
|
||||
m_position = i-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
uint16_t Switch::segment(void)
|
||||
{
|
||||
return m_segment;
|
||||
}
|
||||
|
||||
uint16_t Switch::position(void)
|
||||
{
|
||||
return m_position;
|
||||
}
|
||||
|
||||
uint16_t Switch::channel(void)
|
||||
{
|
||||
return m_channel;
|
||||
}
|
||||
|
||||
void Switch::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
Q_UNUSED(e);
|
||||
|
||||
if(Recovery == true)
|
||||
{
|
||||
m_position = m_segment/2;
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
if(m_switchdir == 0)
|
||||
{
|
||||
m_position = Limit((e->y() / (this->height()/m_segment)),0,m_segment -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_position = Limit((e->x() / (this->width()/m_segment)),0,m_segment -1 );
|
||||
}
|
||||
|
||||
m_channel = m_min + (float)(m_position)/(m_segment - 1) * (m_max - m_min);
|
||||
//qDebug() << m_channel << m_position;
|
||||
emit positionChange(m_channel);
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
if(m_switchdir == 0)
|
||||
{
|
||||
m_position = Limit((e->y() / (this->height()/m_segment)),0,m_segment -1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_position = Limit((e->x() / (this->width()/m_segment)),0,m_segment -1 );
|
||||
}
|
||||
|
||||
m_channel = m_min + (float)(m_position)/(m_segment - 1) * (m_max - m_min);
|
||||
emit positionChange(m_channel);
|
||||
update();
|
||||
}
|
||||
|
||||
void Switch::paintEvent(QPaintEvent *)
|
||||
{
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */
|
||||
painter.translate(width() / 2, height() / 2); /* 坐标变换为窗体中心 */
|
||||
//int side = qMin(width(), height());
|
||||
if(m_switchdir == 0)
|
||||
{
|
||||
painter.scale(width() / 500.0, height() / 1000.0); /* 比例缩放 */
|
||||
}
|
||||
else
|
||||
{
|
||||
painter.scale(width() / 1000.0, height() / 500.0); /* 比例缩放 */
|
||||
}
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
||||
drawSwitch(&painter);
|
||||
}
|
||||
|
||||
void Switch::drawSwitch(QPainter *painter)
|
||||
{
|
||||
if(m_switchdir == 0)
|
||||
{
|
||||
painter->save();
|
||||
painter->setBrush(QColor("#454545"));
|
||||
painter->drawRect(-250,-500,500,1000);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
painter->setBrush(QColor("#5F9EA0"));
|
||||
painter->drawRect(-250,-500 + 1000/m_segment * m_position,500,1000/m_segment);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
QPen pen;
|
||||
pen.setColor(QColor("#FFFFFF"));
|
||||
pen.setWidth(20);
|
||||
|
||||
QFont font;
|
||||
font.setPixelSize(150);
|
||||
|
||||
painter->setFont(font);
|
||||
|
||||
painter->setPen(pen);
|
||||
for(int i = 1;i<m_segment;i++)
|
||||
{
|
||||
painter->drawLine(-250,-500 + 1000/m_segment * i,250,-500 + 1000/m_segment * i);
|
||||
}
|
||||
|
||||
for (int i = 0;i<m_segment;i++) {
|
||||
if(Notice.contains(i))
|
||||
{
|
||||
painter->drawText(QRect(-250,-500 + 1000/m_segment * i,500,1000/m_segment),Qt::AlignVCenter|Qt::AlignHCenter,Notice.value(i));
|
||||
}
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
painter->save();
|
||||
painter->setBrush(QColor("#454545"));
|
||||
painter->drawRect(-500,-250,1000,500);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
painter->setBrush(QColor("#5F9EA0"));
|
||||
painter->drawRect(-500 + 1000/m_segment * m_position,-250,1000/m_segment,500);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
|
||||
QPen pen;
|
||||
pen.setColor(QColor("#FFFFFF"));
|
||||
pen.setWidth(20);
|
||||
|
||||
QFont font;
|
||||
font.setPixelSize(150);
|
||||
|
||||
painter->setFont(font);
|
||||
painter->setPen(pen);
|
||||
for(int i = 1;i<m_segment;i++)
|
||||
{
|
||||
painter->drawLine(-500 + 1000/m_segment * i,-250,-500 + 1000/m_segment * i,250);
|
||||
}
|
||||
|
||||
for (int i = 0;i<m_segment;i++) {
|
||||
if(Notice.contains(i))
|
||||
{
|
||||
painter->drawText(QRect(-500 + 1000/m_segment * i,-250,1000/m_segment,500),Qt::AlignVCenter|Qt::AlignHCenter,Notice.value(i));
|
||||
}
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user