J'essaye de faire un indicateur de vitesse au QT 5.8. J'utilise le widget QWT Dial. Mais j'ai un problème comme montrer une étiquette pour l'unité (km/h). J'ai utilisé Google, mais je ne le trouve pas. Comment puis-je le faire? merciQWT Cadran, unité d'exposition
0
A
Répondre
1
La solution que je propose est de créer une classe qui hérite de QwtDial
et écraser la méthode 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);
}
Exemple:
#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
@Martin Valdo Valášek Avez-vous essayé ma solution? – eyllanesc
+0
Je vais essayer .. –
Vous pourriez montrer ce que vous avez essayé. – eyllanesc