2017-05-10 3 views
0

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

+2

Vous pourriez montrer ce que vous avez essayé. – eyllanesc

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(); 
} 

enter image description here

+0

@Martin Valdo Valášek Avez-vous essayé ma solution? – eyllanesc

+0

Je vais essayer .. –