2017-05-10 66 views
0

我嘗試在QT 5.8中做車速表。我使用小部件QWT撥號。但我有問題,如單位(公里/小時)顯示標籤。我使用谷歌,但我沒有找到它。 我該怎麼做? 謝謝QWT撥號,顯示單位

+2

你可以展示你試過的東西。 – eyllanesc

回答

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

enter image description here

+0

@Martin ValdoValášek您是否嘗試過我的解決方案? – eyllanesc

+0

我會試試.. –