代码修改#ifndef SWITCHFORM_H#define SWITCHFORM_H#include QWidget#include QTimer#include QColornamespace Ui class SwitchForm;class SwitchForm public QWidget Q_OBJECTpublic explicit SwitchFormQWidget
可以通过修改drawSlider函数来实现内部圆圈图形在整个图形的右侧。
首先,需要修改drawSlider函数的绘制逻辑,使得滑块在右侧绘制。可以通过将滑块的起始坐标m_startX设置为width() - sliderWidth - m_space来实现。
修改后的drawSlider函数如下:
void SwitchForm::drawSlider(QPainter *painter)
{
painter->save();
painter->setPen(Qt::NoPen);
QColor color = m_checked ? m_sliderColorOn : m_sliderColorOff;
painter->setBrush(QBrush(color));
int sliderWidth = qMin(width(), height()) - m_space * 2;
QRect rect(width() - sliderWidth - m_space - m_startX, m_space, sliderWidth, sliderWidth);
painter->drawEllipse(rect);
painter->restore();
}
然后,在mousePressEvent函数中,需要修改滑块的终点坐标m_endX的计算方式,使得滑块在右侧绘制。可以通过将滑块的终点坐标设置为0来实现。
修改后的mousePressEvent函数如下:
void SwitchForm::mousePressEvent(QMouseEvent *ev)
{
Q_UNUSED(ev)
m_checked = !m_checked;
emit statusChanged(m_checked);
//计算步长
m_step = width() / 10;
//计算滑块X轴终点坐标
if (m_checked) {
m_endX = 0;
} else {
m_endX = width() - height();
}
//判断是否使用动画
if (m_animation) {
m_timer->start();
} else{
m_startX = m_endX;
update();
}
}
这样,当调用setChecked(true)时,内部圆圈图形就会在整个图形的右侧绘制。
原文地址: https://www.cveoy.top/t/topic/iy35 著作权归作者所有。请勿转载和采集!