0
点赞
收藏
分享

微信扫一扫

MongoDB 快速入门

惠特曼 03-05 20:00 阅读 3

1.运行界面

2.步骤

其实很简单。

2.1绘制底图圆角矩形

2.2绘制播放进度圆角矩形

参考:painter绘图

3.源码

#pragma once

#include <QWidget>
#include <QLabel>
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QDebug>
#include <QShowEvent>
#include <QPainter>

class WProgressBar : public QWidget
{
	Q_OBJECT
public:
	WProgressBar(QWidget *parent = nullptr);
	~WProgressBar();

signals:
	void sigCustomSliderValueChanged(double pos);//自定义的鼠标单击信号,用于捕获并处理

public:
	//获取pos
	double getPos();

public slots:
	//设置0~1
	void slotSetValue(double pos);

protected:
	void mousePressEvent(QMouseEvent *ev);
	void mouseMoveEvent(QMouseEvent *ev);
	void mouseReleaseEvent(QMouseEvent *ev);
	void paintEvent(QPaintEvent *);

private:
	double m_pos = 0;
};


#include "WProgressBar.h"


WProgressBar::WProgressBar(QWidget *parent)
	: QWidget(parent)
{
	this->setWindowFlags(Qt::FramelessWindowHint);          //隐藏窗口
	this->setAttribute(Qt::WA_TranslucentBackground, true); //窗口透明
}

WProgressBar::~WProgressBar()
{
}

double WProgressBar::getPos()
{
	return m_pos;
}

void WProgressBar::slotSetValue(double pos)
{
	m_pos = pos;
	update();
}

void WProgressBar::mousePressEvent(QMouseEvent *ev)
{
	//double pos = (double)ev->pos().x() / (double)width();
	//if (pos >= 1)
	//	pos = 1;

	//if (pos <= 0)
	//	pos = 0;

	//m_pos = pos;
	//update();
	//qDebug() << "seek pos = " << pos;
	//emit sigCustomSliderValueChanged(pos);
}

void WProgressBar::mouseMoveEvent(QMouseEvent *ev)
{
	double pos = (double)ev->pos().x() / (double)width();
	if (pos >= 1)
		pos = 1;

	if (pos <= 0)
		pos = 0;

	m_pos = pos;
	update();
}

void WProgressBar::mouseReleaseEvent(QMouseEvent *ev)
{
	double pos = (double)ev->pos().x() / (double)width();
	emit sigCustomSliderValueChanged(pos);
}

void WProgressBar::paintEvent(QPaintEvent *e)
{
	QWidget::paintEvent(e);
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing);

	//绘制底图矩形
	QBrush brush;
	brush.setColor(QColor(233,233,233));
	brush.setStyle(Qt::SolidPattern);
	painter.setBrush(brush);
	painter.drawRoundedRect(this->rect(), 5, 5);

	//绘制播放进度
	QLinearGradient radial;

	radial.setStart(0, 0);
	radial.setFinalStop(0, 1);

	//设置起始点颜色,0表示起始
	radial.setColorAt(0, QColor("#87CEFA"));

	//设置终点颜色 1表示终点
	radial.setColorAt(1, QColor("#1E90FF"));

	//设置延展方式
	radial.setSpread(QGradient::PadSpread);

	QPen pen(QBrush("#1E90FF"), 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
	painter.setPen(pen);

	//设置画刷
	painter.setBrush(radial);

	QRect rect = this->rect();
	rect.setWidth(rect.width() * m_pos);

	//画矩形
	painter.drawRoundedRect(rect, 5, 5);
}

4.应用截图

一款自己做的播放器界面截图

5.绘图参考

1.圆形进度条实现

2.麦克风音量大小模拟

3.自定义时钟

4.自定义圆形进度条

举报

相关推荐

0 条评论