QWT 表盘,显示单位
Posted
技术标签:
【中文标题】QWT 表盘,显示单位【英文标题】:QWT Dial, show unit 【发布时间】:2017-05-10 23:31:39 【问题描述】:我尝试在 QT 5.8 中做速度计。我使用小部件 QWT 拨号。但我有问题,因为显示单位标签(公里/小时)。我用谷歌,但我没有找到它。 我该怎么做? 谢谢
【问题讨论】:
你可以展示你的尝试。 【参考方案1】:我建议的解决方案是创建一个继承自QwtDial
的类并覆盖paintEvent
方法。
mydial.h
#ifndef MYDIAL_H
#define MYDIAL_H
#include <qwt_dial.h>
class myDial : public QwtDial
Q_OBJECT
public:
myDial(QWidget *parent = NULL );
protected:
void paintEvent(QPaintEvent *event);
;
#endif // MYDIAL_H
mydial.cpp
#include "mydial.h"
#include <QPainter>
myDial::myDial(QWidget *parent):QwtDial(parent)
void myDial::paintEvent(QPaintEvent *event)
QwtDial::paintEvent(event);
QPainter painter(this);
painter.setPen(Qt::black);
QFont font;
font.setPointSize(11);
painter.setFont(font);
QString text = QString("%1 km/h").arg(value());
auto c = rect().center();
auto Size = painter.fontMetrics().size(Qt::TextSingleLine, text);
painter.drawText(QPointF(c.x() -Size.width()/2, c.y()+5*Size.height()), text);
例子:
#include <QApplication>
#include "mydial.h"
#include <qwt_dial_needle.h>
int main(int argc, char *argv[])
QApplication a(argc, argv);
myDial w;
w.setScaleArc(30,330);
w.setLineWidth(15);
w.setWrapping(false);
QwtDialSimpleNeedle *nd = new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, Qt::white, Qt::red);
w.setNeedle(nd);
w.setWindowTitle("Custom QwtDial");
w.show();
return a.exec();
【讨论】:
从0到100的范围是怎么设置的,从0到240是怎么改的? @Gansroy 试试setScale(0, 240)
以上是关于QWT 表盘,显示单位的主要内容,如果未能解决你的问题,请参考以下文章