以下是修改的部分代码:

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;
    int sliderX = m_checked ? width() - sliderWidth - m_space : m_space; // 修改滑块的X轴坐标
    QRect rect(sliderX, m_space, sliderWidth, sliderWidth);
    painter->drawEllipse(rect);

    painter->restore();
}

void SwitchForm::mousePressEvent(QMouseEvent *ev)
{
    Q_UNUSED(ev)

    m_checked = !m_checked;
    emit statusChanged(m_checked);

    // 计算步长
    m_step = qAbs(m_endX - m_startX) / 10; // 修改步长的计算方式

    // 判断是否使用动画
    if (m_animation) {
        m_timer->start();
    } else {
        m_startX = m_endX;
        update();
    }
}

这些修改将确保在设置setChecked(true)时,内部圆圈图形位于整个图形的右侧,而在设置setChecked(false)时,内部圆圈图形位于整个图形的左侧。

代码修改只显示修改的部分#ifndef SWITCHFORM_H#define SWITCHFORM_H#include QWidget#include QTimer#include QColornamespace Ui class SwitchForm;class SwitchForm public QWidget Q_OBJECTpublic explicit SwitchFor

原文地址: https://www.cveoy.top/t/topic/iy4g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录