帮我写一个QT 仪表盘控件的类
时间: 2023-05-22 08:02:48 浏览: 264
很高兴为您提供帮助!以下是一个简单的基于QT的仪表盘控件类实现:
class Dashboard : public QWidget {
Q_OBJECT
public:
Dashboard(QWidget *parent = nullptr);
void setRange(qreal min, qreal max);
void setValue(qreal value);
protected:
void paintEvent(QPaintEvent *);
private:
qreal m_min;
qreal m_max;
qreal m_value;
};
void Dashboard::setRange(qreal min, qreal max) {
m_min = min;
m_max = max;
}
void Dashboard::setValue(qreal value) {
m_value = value;
}
void Dashboard::paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 绘制背景
painter.fillRect(rect(), Qt::white);
// 计算当前值在范围内的比例
qreal ratio = (m_value - m_min) / (m_max - m_min);
// 绘制进度条
painter.setBrush(Qt::green);
painter.setPen(Qt::NoPen);
painter.drawPie(rect(), 225*16, (ratio*270)*16);
// 绘制刻度线
painter.setBrush(Qt::black);
painter.setPen(Qt::NoPen);
qreal tickCount = (m_max - m_min) / 10.0;
qreal angleStep = 270 / tickCount;
for (int i = 0; i <= tickCount; ++i) {
qreal angle = i * angleStep;
qreal x1 = 0.4 * rect().width() / 2 * qCos(qDegreesToRadians(angle + 45));
qreal y1 = 0.4 * rect().width() / 2 * qSin(qDegreesToRadians(angle + 45));
qreal x2 = 0.45 * rect().width() / 2 * qCos(qDegreesToRadians(angle + 45));
qreal y2 = 0.45 * rect().width() / 2 * qSin(qDegreesToRadians(angle + 45));
painter.drawLine(width() / 2 + x1, height() / 2 + y1,
width() / 2 + x2, height() / 2 + y2);
}
// 绘制文字
painter.setBrush(Qt::black);
painter.setPen(Qt::NoPen);
QFont font("Helvetica", 12, QFont::Bold);
painter.setFont(font);
painter.drawText(rect(), Qt::AlignCenter, QString::number(m_value));
}
// 使用方法示例:
// Dashboard *dashboard = new Dashboard();
// dashboard->setRange(0, 100);
// dashboard->setValue(50);
// dashboard->show();
希望对您有所帮助!
阅读全文
相关推荐

















