widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
#include <QString>
#include <QTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//动态增加时速画面效果
void slot_speed_changed();
//绘制实时数字
void DrawDbNum(QPainter& painter, QPoint & point);
protected:
void paintEvent(QPaintEvent*);
private:
Ui::Widget *ui;
QTimer timer; //定时器
int m_degRotate = 0;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
connect(&timer, &QTimer::timeout, [=]()
{
//动态增加时速画面效果
slot_speed_changed();
});
timer.start(100);
}
Widget::~Widget()
{
delete ui;
timer.stop();
}
//动态增加时速画面效果
void Widget::slot_speed_changed()
{
m_degRotate++;
if(m_degRotate > 250) {
m_degRotate = 0;
}
update();//刷新很重要!
}
//绘制实时数字
void Widget::DrawDbNum(QPainter& painter, QPoint & point)
{
painter.save();
painter.setPen(QColor(255,0,0));
QFont font;
font.setFamily("Arial");
font.setPointSize(20);
painter.setFont(font);
// 根据 QFont 对象创建 QFontMetrics 实例
QFontMetrics font_metrics(painter.font());
QString str = QString::number(m_degRotate) + QString("kb/s");
// 获取文本的长度
int text_width = font_metrics.width(str);
// 获取文本的高度
int text_height = font_metrics.height();
QPoint curPoint = QPoint(point.x() - text_width / 2, point.y() - text_height);
painter.drawText(curPoint, str);
str = "数据传输速率";
text_width = font_metrics.width(str);
QPoint curPoint2 = QPoint(point.x() - text_width / 2, point.y() + text_height);
painter.drawText(curPoint2, str);
painter.restore();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPoint dbrPoint = QPoint(width() / 2, height() / 2);
DrawDbNum(painter, dbrPoint);
}