mirror of
https://gitee.com/drabel/LibQQt.git
synced 2025-01-04 10:18:44 +08:00
update customprogressbar
This commit is contained in:
parent
04a5cdb9ed
commit
f29917a08a
@ -1,6 +1,7 @@
|
|||||||
#include "qqtexquisiteform.h"
|
#include "qqtexquisiteform.h"
|
||||||
#include "ui_qqtexquisiteform.h"
|
#include "ui_qqtexquisiteform.h"
|
||||||
|
|
||||||
|
#include <QMouseEvent>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <qqtcore.h>
|
#include <qqtcore.h>
|
||||||
|
|
||||||
@ -10,23 +11,32 @@ QQtExquisiteForm::QQtExquisiteForm(QWidget *parent) :
|
|||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->hs0->setRange(0, 100);
|
ui->hs0->setRange(0, 100);
|
||||||
|
|
||||||
ui->w0->setMinValue(0);
|
ui->w0->setMinValue(0);
|
||||||
ui->w0->setMaxValue(80);
|
ui->w0->setMaxValue(80);
|
||||||
|
|
||||||
|
|
||||||
ui->w2->setRange(0, 80);
|
ui->w2->setRange(0, 80);
|
||||||
|
//ui->w2->setCircleType(QQtCustomProgressBar::CircleType_Image);
|
||||||
|
//ui->w2->setCircleImage("./xxtest.png");
|
||||||
|
ui->w2->setCircleColor(QColor(20, 40, 100));
|
||||||
|
|
||||||
connect(ui->hs0, SIGNAL(valueChanged(int)), ui->w0, SLOT(setValue(int)));
|
connect(ui->hs0, SIGNAL(valueChanged(int)), ui->w0, SLOT(setValue(int)));
|
||||||
connect(ui->hs0, SIGNAL(valueChanged(int)), ui->w2, SLOT(setValue(int)));
|
connect(ui->hs0, SIGNAL(valueChanged(int)), ui->w2, SLOT(setValue(int)));
|
||||||
connect(ui->hs0, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
|
|
||||||
m_timer = new QTimer(this);
|
m_timer = new QTimer(this);
|
||||||
m_timer->setSingleShot(false);
|
m_timer->setSingleShot(false);
|
||||||
|
|
||||||
m_t1 = new QTimer(this);
|
m_timer_down = new QTimer(this);
|
||||||
m_t1->setSingleShot(false);
|
m_timer_down->setSingleShot(false);
|
||||||
|
|
||||||
connect(m_t1, SIGNAL(timeout()), this, SLOT(setValueDown()));
|
connect(m_timer_down, SIGNAL(timeout()), this, SLOT(setValueDown()));
|
||||||
connect(m_timer, SIGNAL(timeout()), this, SLOT(setValue()));
|
connect(m_timer, SIGNAL(timeout()), this, SLOT(setValue()));
|
||||||
|
|
||||||
value = 0;
|
value = 0;
|
||||||
m_t1->start(10);
|
curmaxValue = 80;
|
||||||
|
m_timer_down->start(10);
|
||||||
|
|
||||||
|
ui->hs0->installEventFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
QQtExquisiteForm::~QQtExquisiteForm()
|
QQtExquisiteForm::~QQtExquisiteForm()
|
||||||
@ -34,15 +44,14 @@ QQtExquisiteForm::~QQtExquisiteForm()
|
|||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QQtExquisiteForm::setValue(int value)
|
|
||||||
{
|
|
||||||
this->value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QQtExquisiteForm::setValue()
|
void QQtExquisiteForm::setValue()
|
||||||
{
|
{
|
||||||
if(value < 80)
|
if(value>curmaxValue)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(value < curmaxValue)
|
||||||
value++;
|
value++;
|
||||||
|
|
||||||
ui->hs0->setValue(value);
|
ui->hs0->setValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +67,7 @@ void QQtExquisiteForm::keyPressEvent(QKeyEvent *event)
|
|||||||
{
|
{
|
||||||
//pline() << hex << event->key();
|
//pline() << hex << event->key();
|
||||||
if(event->key() == Qt::Key_Up) {
|
if(event->key() == Qt::Key_Up) {
|
||||||
m_t1->stop();
|
m_timer_down->stop();
|
||||||
m_timer->start(10);
|
m_timer->start(10);
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
@ -70,9 +79,41 @@ void QQtExquisiteForm::keyPressEvent(QKeyEvent *event)
|
|||||||
void QQtExquisiteForm::keyReleaseEvent(QKeyEvent *event)
|
void QQtExquisiteForm::keyReleaseEvent(QKeyEvent *event)
|
||||||
{
|
{
|
||||||
if(event->key() == Qt::Key_Up) {
|
if(event->key() == Qt::Key_Up) {
|
||||||
m_t1->start(10);
|
m_timer_down->start(10);
|
||||||
m_timer->stop();
|
m_timer->stop();
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
QDialog::keyReleaseEvent(event);
|
QDialog::keyReleaseEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QQtExquisiteForm::eventFilter(QObject *watched, QEvent *event)
|
||||||
|
{
|
||||||
|
if(watched == ui->hs0){
|
||||||
|
if(event->type() == QEvent::MouseButtonPress) {
|
||||||
|
QMouseEvent* e = (QMouseEvent*)event;
|
||||||
|
//pline() << hex << e->button();
|
||||||
|
if(e->button() == Qt::LeftButton) {
|
||||||
|
curmaxValue = ui->hs0->minimum() + (ui->hs0->maximum()-ui->hs0->minimum()) * e->x() / ui->hs0->width();
|
||||||
|
m_timer_down->stop();
|
||||||
|
m_timer->start(10);
|
||||||
|
// not necessary because of the bug later.
|
||||||
|
event->accept();
|
||||||
|
// bug:in theory this return is not necessary, after accept, parent won't handle this e continue;
|
||||||
|
// but, it handled. handled once, but child has no action any.
|
||||||
|
// then, use return ,don't goto parent, well to use.
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(event->type() == QEvent::MouseButtonRelease) {
|
||||||
|
QMouseEvent* e = (QMouseEvent*)event;
|
||||||
|
//pline() << hex << e->button();
|
||||||
|
if(e->button() == Qt::LeftButton) {
|
||||||
|
curmaxValue = 80;
|
||||||
|
m_timer->stop();
|
||||||
|
m_timer_down->start(10);
|
||||||
|
event->accept();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return QDialog::eventFilter(watched, event);
|
||||||
|
}
|
||||||
|
@ -17,19 +17,23 @@ public:
|
|||||||
~QQtExquisiteForm();
|
~QQtExquisiteForm();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void setValue(int);
|
|
||||||
void setValue();
|
void setValue();
|
||||||
void setValueDown();
|
void setValueDown();
|
||||||
private:
|
private:
|
||||||
Ui::QQtExquisiteForm *ui;
|
Ui::QQtExquisiteForm *ui;
|
||||||
QTimer* m_timer ;
|
QTimer* m_timer ;
|
||||||
QTimer* m_t1 ;
|
QTimer* m_timer_down ;
|
||||||
int value;
|
int value;
|
||||||
|
int curmaxValue;
|
||||||
|
|
||||||
// QWidget interface
|
// QWidget interface
|
||||||
protected:
|
protected:
|
||||||
virtual void keyPressEvent(QKeyEvent *event) override;
|
virtual void keyPressEvent(QKeyEvent *event) override;
|
||||||
virtual void keyReleaseEvent(QKeyEvent *event) override;
|
virtual void keyReleaseEvent(QKeyEvent *event) override;
|
||||||
|
|
||||||
|
// QObject interface
|
||||||
|
public:
|
||||||
|
virtual bool eventFilter(QObject *watched, QEvent *event) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QQTEXQUISITEFORM_H
|
#endif // QQTEXQUISITEFORM_H
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>250</x>
|
<x>250</x>
|
||||||
<y>30</y>
|
<y>30</y>
|
||||||
<width>181</width>
|
<width>201</width>
|
||||||
<height>121</height>
|
<height>121</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -25,13 +25,13 @@ QQtCustomProgressBar::QQtCustomProgressBar(QWidget *parent) : QWidget(parent)
|
|||||||
freeColor = QColor(100, 100, 100);
|
freeColor = QColor(100, 100, 100);
|
||||||
circleColor = QColor(70, 70, 70);
|
circleColor = QColor(70, 70, 70);
|
||||||
textColor = QColor(250, 250, 250);
|
textColor = QColor(250, 250, 250);
|
||||||
|
textFont = font();
|
||||||
|
|
||||||
percentStyle = PercentStyle_Arc;
|
percentStyle = PercentStyle_Arc;
|
||||||
|
circleType = CircleType_Color;
|
||||||
|
|
||||||
waterDensity = 1;
|
waterDensity = 1;
|
||||||
waterHeight = 1;
|
waterHeight = 1;
|
||||||
|
|
||||||
setFont(QFont("Arial", 7));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QQtCustomProgressBar::~QQtCustomProgressBar()
|
QQtCustomProgressBar::~QQtCustomProgressBar()
|
||||||
@ -42,15 +42,25 @@ void QQtCustomProgressBar::paintEvent(QPaintEvent *)
|
|||||||
{
|
{
|
||||||
int width = this->width();
|
int width = this->width();
|
||||||
int height = this->height();
|
int height = this->height();
|
||||||
|
/*显示实长*/
|
||||||
int side = qMin(width, height);
|
int side = qMin(width, height);
|
||||||
|
|
||||||
/*绘制准备工作,启用反锯齿,平移坐标轴中心,等比例缩放*/
|
/*绘制准备工作,启用反锯齿,平移坐标轴中心,等比例缩放*/
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
||||||
|
/*平移坐标系*/
|
||||||
painter.translate(width / 2, height / 2);
|
painter.translate(width / 2, height / 2);
|
||||||
|
/*更改刻度 设置的是放大的倍数 */
|
||||||
|
/*有利于在绘制的时候,统一绘制数据*/
|
||||||
|
/*矢量放大,不失真*/
|
||||||
painter.scale(side / 200.0, side / 200.0);
|
painter.scale(side / 200.0, side / 200.0);
|
||||||
|
|
||||||
/*绘制中心圆*/
|
/*绘制中心圆*/
|
||||||
|
/*
|
||||||
|
* 实际显示到屏幕的大小(显示实长)为
|
||||||
|
* QPainter绘制区域大小(绘制用数据) * 倍率
|
||||||
|
* 200 * ( side / 200.0 )
|
||||||
|
*/
|
||||||
drawCircle(&painter, 99);
|
drawCircle(&painter, 99);
|
||||||
|
|
||||||
/*根据样式绘制进度*/
|
/*根据样式绘制进度*/
|
||||||
@ -80,7 +90,21 @@ void QQtCustomProgressBar::drawCircle(QPainter *painter, int radius)
|
|||||||
painter->save();
|
painter->save();
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
painter->setBrush(circleColor);
|
painter->setBrush(circleColor);
|
||||||
painter->drawEllipse(-radius, -radius, radius * 2, radius * 2);
|
|
||||||
|
if(circleType == CircleType_Color) {
|
||||||
|
painter->drawEllipse(-radius, -radius, radius * 2, radius * 2);
|
||||||
|
} else {
|
||||||
|
QPixmap pix;
|
||||||
|
pix = QPixmap(circleImage);
|
||||||
|
|
||||||
|
/*自动等比例平滑缩放居中显示*/
|
||||||
|
int targetWidth = pix.width();
|
||||||
|
int targetHeight = pix.height();
|
||||||
|
pix = pix.scaled(targetWidth, targetHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
|
||||||
|
|
||||||
|
painter->drawPixmap(-radius, -radius, radius * 2, radius * 2, pix);
|
||||||
|
}
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,17 +254,22 @@ void QQtCustomProgressBar::drawWave(QPainter *painter, int radius)
|
|||||||
|
|
||||||
void QQtCustomProgressBar::drawText(QPainter *painter, int radius)
|
void QQtCustomProgressBar::drawText(QPainter *painter, int radius)
|
||||||
{
|
{
|
||||||
painter->save();
|
|
||||||
painter->setPen(textColor);
|
|
||||||
painter->setFont(QFont("Arial", 50));
|
|
||||||
|
|
||||||
QRectF textRect(-radius, -radius, radius * 2, radius * 2);
|
|
||||||
QString strValue = QString("%1").arg(value);
|
QString strValue = QString("%1").arg(value);
|
||||||
|
|
||||||
if (showPercent) {
|
if (showPercent) {
|
||||||
strValue = QString("%1%").arg((double)value / (maxValue - minValue) * 100);
|
strValue = QString("%1%").arg((double)value / (maxValue - minValue) * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
painter->save();
|
||||||
|
|
||||||
|
painter->setPen(textColor);
|
||||||
|
painter->setFont(textFont);
|
||||||
|
|
||||||
|
QFontMetricsF fm(textFont);
|
||||||
|
QSizeF textSize = fm.size(Qt::TextSingleLine, strValue);
|
||||||
|
//QRectF textRect(-radius, -radius, radius * 2, radius * 2);
|
||||||
|
QRectF textRect(-textSize.width()/2, 40, textSize.width(), textSize.height());
|
||||||
|
//painter->drawText(-w / 2, 42, strValue);
|
||||||
painter->drawText(textRect, Qt::AlignCenter, strValue);
|
painter->drawText(textRect, Qt::AlignCenter, strValue);
|
||||||
|
|
||||||
painter->restore();
|
painter->restore();
|
||||||
@ -316,6 +345,11 @@ QQtCustomProgressBar::PercentStyle QQtCustomProgressBar::getPercentStyle() const
|
|||||||
return this->percentStyle;
|
return this->percentStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QQtCustomProgressBar::CircleType QQtCustomProgressBar::getCircleType() const
|
||||||
|
{
|
||||||
|
return this->circleType;
|
||||||
|
}
|
||||||
|
|
||||||
QSize QQtCustomProgressBar::sizeHint() const
|
QSize QQtCustomProgressBar::sizeHint() const
|
||||||
{
|
{
|
||||||
return QSize(200, 200);
|
return QSize(200, 200);
|
||||||
@ -438,6 +472,14 @@ void QQtCustomProgressBar::setCircleColor(const QColor &circleColor)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QQtCustomProgressBar::setCircleImage(const QString &circleImage)
|
||||||
|
{
|
||||||
|
if (this->circleImage != circleImage) {
|
||||||
|
this->circleImage = circleImage;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QQtCustomProgressBar::setTextColor(const QColor &textColor)
|
void QQtCustomProgressBar::setTextColor(const QColor &textColor)
|
||||||
{
|
{
|
||||||
if (this->textColor != textColor) {
|
if (this->textColor != textColor) {
|
||||||
@ -462,6 +504,14 @@ void QQtCustomProgressBar::setPercentStyle(QQtCustomProgressBar::PercentStyle pe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QQtCustomProgressBar::setCircleType(QQtCustomProgressBar::CircleType circleType)
|
||||||
|
{
|
||||||
|
if (this->circleType != circleType) {
|
||||||
|
this->circleType = circleType;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QQtCustomProgressBar::setWaterDensity(int value)
|
void QQtCustomProgressBar::setWaterDensity(int value)
|
||||||
{
|
{
|
||||||
if(value < 0)
|
if(value < 0)
|
||||||
|
@ -57,6 +57,11 @@ class QQTSHARED_EXPORT QQtCustomProgressBar : public QWidget
|
|||||||
Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
|
Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
enum CircleType {
|
||||||
|
CircleType_Color = 0, /*使用颜色*/
|
||||||
|
CircleType_Image = 1, /*使用图片*/
|
||||||
|
};
|
||||||
|
|
||||||
enum PercentStyle {
|
enum PercentStyle {
|
||||||
PercentStyle_Arc = 0, /*圆弧风格*/
|
PercentStyle_Arc = 0, /*圆弧风格*/
|
||||||
PercentStyle_Polo = 1, /*水池风格*/
|
PercentStyle_Polo = 1, /*水池风格*/
|
||||||
@ -91,12 +96,15 @@ private:
|
|||||||
QColor usedColor; /*已使用百分比颜色*/
|
QColor usedColor; /*已使用百分比颜色*/
|
||||||
QColor freeColor; /*未使用百分比颜色*/
|
QColor freeColor; /*未使用百分比颜色*/
|
||||||
QColor circleColor; /*圆颜色*/
|
QColor circleColor; /*圆颜色*/
|
||||||
|
QString circleImage; /*圆图片*/
|
||||||
QColor textColor; /*文字颜色*/
|
QColor textColor; /*文字颜色*/
|
||||||
QFont textFont; /*文字字体*/
|
QFont textFont; /*文字字体*/
|
||||||
|
|
||||||
PercentStyle percentStyle; /*进度样式风格*/
|
PercentStyle percentStyle; /*进度样式风格*/
|
||||||
|
CircleType circleType; /*圆的样式类型*/
|
||||||
|
|
||||||
int waterDensity,waterHeight;
|
int waterDensity;
|
||||||
|
int waterHeight;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int getMinValue() const;
|
int getMinValue() const;
|
||||||
@ -117,6 +125,7 @@ public:
|
|||||||
QColor getTextColor() const;
|
QColor getTextColor() const;
|
||||||
|
|
||||||
PercentStyle getPercentStyle() const;
|
PercentStyle getPercentStyle() const;
|
||||||
|
CircleType getCircleType() const;
|
||||||
|
|
||||||
virtual QSize sizeHint() const;
|
virtual QSize sizeHint() const;
|
||||||
virtual QSize minimumSizeHint() const;
|
virtual QSize minimumSizeHint() const;
|
||||||
@ -152,6 +161,8 @@ public Q_SLOTS:
|
|||||||
void setFreeColor(const QColor &freeColor);
|
void setFreeColor(const QColor &freeColor);
|
||||||
/*设置圆颜色*/
|
/*设置圆颜色*/
|
||||||
void setCircleColor(const QColor &circleColor);
|
void setCircleColor(const QColor &circleColor);
|
||||||
|
/*设置圆背景图*/
|
||||||
|
void setCircleImage(const QString &circleImage);
|
||||||
/*设置文本颜色*/
|
/*设置文本颜色*/
|
||||||
void setTextColor(const QColor &textColor);
|
void setTextColor(const QColor &textColor);
|
||||||
/*设置字体*/
|
/*设置字体*/
|
||||||
@ -159,6 +170,7 @@ public Q_SLOTS:
|
|||||||
|
|
||||||
/*设置进度样式风格*/
|
/*设置进度样式风格*/
|
||||||
void setPercentStyle(PercentStyle percentStyle);
|
void setPercentStyle(PercentStyle percentStyle);
|
||||||
|
void setCircleType(CircleType circleType);
|
||||||
|
|
||||||
/*设置水波密度 0-10*/
|
/*设置水波密度 0-10*/
|
||||||
void setWaterDensity(int value);
|
void setWaterDensity(int value);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user