0

I created a C++ class for generating a QML object. My class has a setter method that accepts a QString. I am attempting to pass a degree symbol to this method, however, the degree symbol appears as either a ? or a box depending on the font that I use. I have concluded that the font that I am using does not contain a degree symbol, thus the ? or box being displayed in its place. What font can I use that will display a degree symbol?

horizontalBarGraph.h

#ifndef HORIZONTALBARGRAPH_H
#define HORIZONTALBARGRAPH_H

#include <QObject>
#include <QQuickPaintedItem>

class HorizontalBarGraph : public QQuickPaintedItem
{
    Q_OBJECT

    Q_PROPERTY(QString sensorName READ getSensorName WRITE setSensorName NOTIFY sensorNameChanged)
    Q_PROPERTY(QString units READ getUnits WRITE setUnits NOTIFY unitsChanged)


public:
    HorizontalBarGraph(QQuickItem *parent = 0);
    virtual void paint(QPainter *painter);

    QString getSensorName();
    QString getUnits();

    void    setSensorName(QString sensorName);
    void    setUnits(QString units);

signals:
    void    sensorNameChanged();
    void    unitsChanged();

private:
    QString _sensorName;
    QString _units;

};

#endif // HORIZONTALBARGRAPH_H

horizontalBarGraph.cpp

#include <QPainter>
#include "horizontalBarGraph.h"

HorizontalBarGraph::HorizontalBarGraph(QQuickItem *parent)
    :QQuickPaintedItem(parent),

  _sensorName("Sensor Name"),
  _units("Units")
{

}

void HorizontalBarGraph::paint(QPainter *painter)
{
    QRectF rect = this->boundingRect();
    painter->setRenderHint(QPainter::Antialiasing);
    QPen pen = painter->pen();
    pen.setCapStyle(Qt::FlatCap);

    QFont bottomFont("Sans Serif", 16, QFont::Bold);
    QFont topFont("Sans Serif", 18, QFont::Bold);
    QColor gray1(225, 225, 225);
    QColor gray2(200, 200, 200);
    QColor gray3(175, 175, 175);

    //Sensor name, Units
    painter->save();
    painter->setFont(topFont);
    pen.setColor(gray1);
    painter->setPen(pen);
    painter->drawText(rect.adjusted(0, 0, -50, -40), Qt::AlignLeft | Qt::AlignTop, _sensorName); //Draws sensor name
    painter->drawText(rect.adjusted(50, 0, 0, -40), Qt::AlignRight | Qt::AlignTop, _units); //Draws units
    painter->restore();

}

main.cpp

    ptrHorizontalBarGraph->setSensorName("Oil Temp");
    ptrHorizontalBarGraph->setUnits("\xb0 F");

enter image description here

kubiej21
  • 700
  • 4
  • 14
  • 29
  • Found my answer at this StackOverflow link [https://stackoverflow.com/questions/7586860/how-to-specify-a-unicode-character-using-qstring](https://stackoverflow.com/questions/7586860/how-to-specify-a-unicode-character-using-qstring) – kubiej21 Dec 12 '20 at 21:17

1 Answers1

0

If you are using a const char* string literal, you need to have it encoded as UTF-8.

Degree symbol is \00b0 in UTF-16, but is 0xc2b0 in UTF-8.

Easy fix is probably this:

ptrHorizontalBarGraph->setUnits("\xc2\xb0 F");

Or you can explicitly be UTF-16:

QString s(QChar(0x00b0));
s += " F";
ptrHorizontalBarGraph->setUnits(s);
selbie
  • 100,020
  • 15
  • 103
  • 173