Qt制作自定义音量条

Qt制作自定义音量条

一直希望自己做一个漂亮的音量进度条,今天做好了,拿出来记录一下。做出来的效果如下:
在这里插入图片描述
实现的本质就是两张图片,设置图片的显示范围。灰色的作为底图,根据进度条应该显示的长度,缩放上层高亮图片的显示范围。
废话不多说直接上代码:

#ifndef PROGRESSBAR_H
#define PROGRESSBAR_H#include 
#include 
#include class ProgressBar : public QWidget
{Q_OBJECT
public:explicit ProgressBar(QString backgroundUri, QString progressUri, QWidget* parent = 0);explicit ProgressBar(QPixmap *backgroundImage, QPixmap *progressImage, QWidget* parent = 0);~ProgressBar();void setProgress(int current, int max);void setTotalProgress(int nTotalValue);void setCurrentProgress(int nCurValue);void scale(int w, int h);
private:QString m_backgroundUri;QString m_progressUri;int m_current;int m_max;QPixmap* bg;QPixmap* p;
protected:void paintEvent(QPaintEvent* event);
signals:public slots:
};#endif // PROGRESSBAR_H

源文件实现如下:

#include "progressbar.h"#include ProgressBar::ProgressBar(QString backgroundUri, QString progressUri, QWidget* parent) : QWidget(parent)
{m_backgroundUri = backgroundUri;m_progressUri = progressUri;bg = new QPixmap(m_backgroundUri);//this->resize(bg->size());this->setFixedSize(bg->size());p = new QPixmap(m_progressUri);
}ProgressBar::ProgressBar(QPixmap *backgroundImage, QPixmap *progressImage, QWidget* parent) : QWidget(parent),bg(backgroundImage), // 传入的指针该类会负责释放,外部new完传进来后,不需要外部释放p(progressImage)
{ this->setFixedSize(bg->size());   
}ProgressBar::~ProgressBar()
{delete bg;delete p;
}void ProgressBar::setProgress(int current, int max)
{m_current = current;m_max = max;update();
}void ProgressBar::paintEvent(QPaintEvent* event)
{Q_UNUSED(event);QPainter painter(this);painter.setPen(Qt::NoPen);QRect oBgRect = bg->rect();painter.drawPixmap(oBgRect, *bg); if (m_current > 0){float fRightWidth = (float)oBgRect.width()*(float)m_current / (float)m_max;oBgRect.setRight(fRightWidth);painter.drawTiledPixmap(oBgRect, *p);}	
}void ProgressBar::setTotalProgress(int nTotalValue)
{m_max = nTotalValue;
}void ProgressBar::setCurrentProgress(int nCurValue)
{m_current = nCurValue;this->repaint();
}void ProgressBar::scale(int w, int h)
{if (bg == nullptr){bg = new QPixmap;}*bg = bg->scaled(w, h);this->setFixedSize(bg->size());if (p == nullptr){p = new QPixmap; }*p = p->scaled(w, h);this->repaint();
}

图片自备。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部