可以通过修改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)时,内部圆圈图形就会在整个图形的右侧绘制。

代码修改#ifndef SWITCHFORM_H#define SWITCHFORM_H#include QWidget#include QTimer#include QColornamespace Ui class SwitchForm;class SwitchForm public QWidget Q_OBJECTpublic explicit SwitchFormQWidget

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

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