直播平臺搭建原始碼,qt自定義滑動按鈕

zhibo系統開發發表於2023-03-30

直播平臺搭建原始碼,qt自定義滑動按鈕

程式碼:


switchbutton.h


#ifndef switchbutton_H
#define switchbutton_H
#include <QWidget>
#include <QTimer>
#include <QColor>
class switchbutton : public QWidget
{
    Q_OBJECT
public:
    explicit switchbutton(QWidget *parent = 0);
    ~switchbutton(){}
signals:
    void statusChanged(bool checked);
public slots:
    void updateValue();
private:
    void drawBackGround(QPainter *painter);
    void drawSlider(QPainter *painter);
protected:
    void paintEvent(QPaintEvent *ev);
    void mousePressEvent(QMouseEvent *ev);
private:
    int m_space;                //滑塊距離邊界距離
    int m_radius;               //圓角角度
    bool m_checked;             //是否選中
    bool m_showText;            //是否顯示文字
    bool m_showCircle;          //是否顯示圓圈
    bool m_animation;           //是否使用動畫
    QColor m_bgColorOn;         //開啟時候的背景色
    QColor m_bgColorOff;        //關閉時候的背景色
    QColor m_sliderColorOn;     //開啟時候滑塊顏色
    QColor m_sliderColorOff;    //關閉時候滑塊顏色
    QColor m_textColor;         //文字顏色
    QString m_textOn;           //開啟時候的文字
    QString m_textOff;          //關閉時候的文字
    QTimer  *m_timer;            //動畫定時器
    int     m_step;             //動畫步長
    int     m_startX;           //滑塊開始X軸座標
    int     m_endX;             //滑塊結束X軸座標
public:
    int space()                 const;
    int radius()                const;
    bool checked()              const;
    bool showText()             const;
    bool showCircel()           const;
    bool animation()            const;
    QColor bgColorOn()          const;
    QColor bgColorOff()         const;
    QColor sliderColorOn()      const;
    QColor sliderColorOff()     const;
    QColor textColor()          const;
    QString textOn()            const;
    QString textOff()           const;
    int step()                  const;
    int startX()                const;
    int endX()                  const;
public Q_SLOTS:
    void setSpace(int space);
    void setRadius(int radius);
    void setChecked(bool checked);
    void setShowText(bool show);
    void setShowCircle(bool show);
    void setAnimation(bool ok);
    void setBgColorOn(const QColor &color);
    void setBgColorOff(const QColor &color);
    void setSliderColorOn(const QColor &color);
    void setSliderColorOff(const QColor &color);
    void setTextColor(const QColor &color);
    void setTextOn(const QString &text);
    void setTextOff(const QString &text);
};
#endif // switchbutton_H


switchbutton.cpp

#pragma execution_character_set("utf-8")
#include "switchbutton.h"
#include <QPainter>
switchbutton::switchbutton(QWidget *parent) : QWidget(parent)
{
    m_space = 2;
    m_radius = 5;
    m_checked = false;
    m_showText = true;
    m_showText = false;
    m_animation = true;
    m_bgColorOn = QColor(102, 205, 170);//設定按鈕內部顏色
    m_bgColorOff = QColor(190, 190, 190);
    m_sliderColorOn = QColor(255, 255, 255);
    m_sliderColorOff = QColor(255, 255, 255);
    m_textColor = QColor(255, 255, 255);
    m_textOn = "開啟";//設定按鈕中的文字
    m_textOff = "關閉";
    m_step = 0;
    m_startX = 0;
    m_endX = 0;
    m_timer = new QTimer(this);
    m_timer->setInterval(30);
    connect(m_timer, SIGNAL(timeout()), this, SLOT(updateValue()));
}
void switchbutton::drawBackGround(QPainter *painter)
{
    painter->save();
    painter->setPen(Qt::NoPen);
    QColor bgColor = m_checked ? m_bgColorOn : m_bgColorOff;
    if (isEnabled()) {
        bgColor.setAlpha(150);
    }
    painter->setBrush(bgColor);
    QRect rect(0, 0, width(), height());
    int side = qMin(width(), height());
    //左側半圓
    QPainterPath path1;
    path1.addEllipse(rect.x(), rect.y(), side, side);
    //右側半圓
    QPainterPath path2;
    path2.addEllipse(rect.width() - side, rect.y(), side, side);
    //中間的矩形
    QPainterPath path3;
    path3.addRect(rect.x() + side / 2, rect.y(), rect.width() - side, height());
    QPainterPath path = path1 + path2 + path3;
    painter->drawPath(path);
    //繪製文字
    //滑塊半徑
    int sliderWidth = qMin(height(), width()) - m_space * 2 - 5;
    if (m_checked){
        QRect textRect(0, 0, width() - sliderWidth, height());
        painter->setPen(QPen(m_textColor));
        painter->drawText(textRect, Qt::AlignCenter, m_textOn);
    } else {
        QRect textRect(sliderWidth, 0, width() - sliderWidth, height());
        painter->setPen(QPen(m_textColor));
        painter->drawText(textRect, Qt::AlignCenter, m_textOff);
    }
    painter->restore();
}


 以上就是直播平臺搭建原始碼,qt自定義滑動按鈕, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2942654/,如需轉載,請註明出處,否則將追究法律責任。

相關文章