Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Is stroke the text (Circle text )
QtWS25 Last Chance

Is stroke the text (Circle text )

Scheduled Pinned Locked Moved Solved General and Desktop
qt5.11qpainter
4 Posts 2 Posters 824 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    timob256
    wrote on 16 Dec 2021, 13:28 last edited by timob256
    #1

    I want to stroke the text, like this
    33.png

    how to create outlines in a function drawText() in classes QPainter ? ??

    my primer

    Screenshot_20211216_165308.png

    #include "spidometr_widget.h"
    #include <math.h>
    #include <QDebug>
    
    spidometr_widget::spidometr_widget(QWidget *parent)
        : QWidget(parent)
    {
    
        // #include <math.h> #include <QDebug>
        float a_t_pitch = 30.0;
         if((fmod(a_t_pitch, float(30))) == float(0.0))
         {
            qDebug() << "qwerrt";
         }
    
         //  обявление максимальная скорость
    //     setSpidometr(100, "QString nadp");
         setSpidometr_value(0, "", "", "");
    
     }
    
    spidometr_widget::~spidometr_widget()
    {
    
    }
    
    
    
    void spidometr_widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);                                         // Создаём объект отрисовщика
        QBrush bgfon(QColor(48,172,220),Qt::NoBrush);                   // устанавливаем цвет фона и тип заливки (с фоном без фона и тип заливки)
        QBrush maska(QColor(48,172,220,120),Qt::SolidPattern);              // для маски
        QPen pen_maska(Qt::NoPen);
        painter.setRenderHint(QPainter::Antialiasing);                  // убираем резкие кубики
    
    
    
        _myTexpr.m_t_razm[0] = 14;                                                        // выставляем размеры ширины линии
        QPen pen_skor_zap(Qt::green,  _myTexpr.m_t_razm[0], Qt::SolidLine, Qt::FlatCap);  // кисть для скорости
        QPen pen_skor_pyst(Qt::black, _myTexpr.m_t_razm[0], Qt::SolidLine, Qt::FlatCap);  // кисть для заполения (не скорости)
        painter.setBrush(bgfon);                                        // задаём цвет фона
        painter.setPen(pen_skor_zap);                                   // Устанавливаем кисть для линий и текста
    
    
    
    
        // блок чтоб не пересчитывать если размеры не изменились
        if( _myTexpr.razm_ekran_X != this->width())
        {
            _myTexpr.razm_ekran_X = this->width();
            _myTexpr.razm_ekran_Y = this->height();
            razmer_spidometr(this->width(), this->height());
    //        _myTexpr.svoistv_shrift("Areal", _myTexpr.m_t_razm[9], QFont::Light); // свойства шрифта
         }
        if(_myTexpr.razm_ekran_Y != this->height())
        {
            _myTexpr.razm_ekran_X = this->width();
            _myTexpr.razm_ekran_Y = this->height();
            razmer_spidometr(this->width(), this->height());
     //        _myTexpr.svoistv_shrift("Areal", _myTexpr.m_t_razm[9], QFont::Light); // свойства шрифта
         }
    
        //  тут обводы и маску задаём
    //    QRectF rectangle0(0,0,_myTexpr.m_t_razm[2] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0],
    //           _myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0]);
    
        QRectF rectangle0( _myTexpr.m_t_razm[2] - _myTexpr.m_t_razm[5]/2.0/*+_myTexpr.m_t_razm[0]*/,
                          _myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[5]/2.0/*+_myTexpr.m_t_razm[0]*/,
                _myTexpr.m_t_razm[5]/*-_myTexpr.m_t_razm[0]*2*/, _myTexpr.m_t_razm[5]/*-_myTexpr.m_t_razm[0]*2*/); // задаём прямоугольник
        painter.setBrush(maska);                                        // задаём цвет фона
        painter.setPen(pen_maska);
        painter.drawRect(rectangle0);
        // вертаем назад
        painter.setBrush(bgfon);                                        // задаём цвет фона
        painter.setPen(pen_skor_zap);
    
    
    
    
        QRectF rectangle( _myTexpr.m_t_razm[2] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0],
                          _myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0],
                _myTexpr.m_t_razm[5]-_myTexpr.m_t_razm[0]*2, _myTexpr.m_t_razm[5]-_myTexpr.m_t_razm[0]*2); // задаём прямоугольник через рамеры (размеры экрана минус ширина текста)
    
    
        QFont razm_shrift("Areal", _myTexpr.m_t_razm[7]*2.4, QFont::Light);         // свойства шрифта
        painter.setFont(razm_shrift);                                               // устанавливаем размер шрифта
        QFontMetrics stroka_razm = painter.fontMetrics();                           // метрика шрифта
    
    //    QString("$%1").arg(_myTexpr.m_t_razm[4]/_myTexpr.speed_shag)
    //    _myTexpr.m_t_razm[4] =_myTexpr.m_t_razm[4]/_myTexpr.speed_shag;
    
        _myTexpr.nadp1 = QString::number(_myTexpr.m_t_razm[4]/_myTexpr.speed_shag, 'f', 1); // переводим число в строку.
        _myTexpr.nadp1 = QString("%1").arg(_myTexpr.nadp1);
    
    //    QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect(this);
    
    //    effect->setOffset(-1, -1);
    //    effect->setColor(Qt::yellow);
    //    ui->label->setGraphicsEffect(effect);
    //    _myTexpr.nadp1.set
    
        // --------
    
        QPainterPath path;
    //	path.addText(x, y, font(), text());
    
    //	painter.fillPath(path, palette().windowText());
        painter.strokePath(path, QPen(QColor(255, 0, 0, 250), 10));
    
    
        //  --------
    
        _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp1);               // узнаём ширину строки
        painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),      /* тут ввод текста */
                (_myTexpr.m_t_razm[3]-_myTexpr.m_t_razm[7]/2.0),
                _myTexpr.nadp1); // рисуем надпись
    
    
            painter.strokePath(path, QPen(QColor(255, 0, 0, 255), 2));
    
        QFont razm_shrift1("Areal", _myTexpr.m_t_razm[7]*0.6, QFont::Light);    // свойства шрифта
        painter.setFont(razm_shrift1);                                          // устанавливаем размер шрифта
        stroka_razm = painter.fontMetrics();                                    // метрика шрифта
        _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp2);               // узнаём ширину строки
        painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),
                (_myTexpr.m_t_razm[3]+_myTexpr.m_t_razm[5]/4.0-_myTexpr.m_t_razm[7]/2.0),
                _myTexpr.nadp2); // рисуем надпись
    
    
    
        QFont razm_shrift2("Areal", _myTexpr.m_t_razm[7], QFont::Light);      // свойства шрифта
        painter.setFont(razm_shrift2);                                        // устанавливаем размер шрифта
        stroka_razm = painter.fontMetrics();                                  // метрика шрифта
        _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp3);             // узнаём ширину строки
        painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),
                (_myTexpr.m_t_razm[3]+_myTexpr.m_t_razm[5]/2.0-_myTexpr.m_t_razm[7]/2.0),
                _myTexpr.nadp3); // рисуем надпись
    
        //--
    
    //    float ass = _myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[7]/2.0;
    //    float ass1 = _myTexpr.m_t_razm[7];
    //    qDebug() << "ass" << ass << " _myTexpr.razm_ekran_X" << _myTexpr.razm_ekran_X;
    //    qDebug() << "ass1" << ass1 << " _myTexpr.m_t_razm[2]" << _myTexpr.m_t_razm[2];
    
    
    
        // тут заполнение рисую заполненную засть и не заполненную спидометр
    
        int startAngle = 0 * 16;
        int spanAngle =  262 * 16;
    
    //    painter.drawArc(rectangle, startAngle, spanAngle); // арка скорости
    
    
        painter.translate(this->width()/2.0, this->height()/2.0);
        painter.rotate(41);
        painter.translate( -this->width()/2.0, -this->height()/2.0);
    
    
        painter.setPen(pen_skor_zap);                                                     // Устанавливаем кисть для линий и текста
        // startAngle, _myTexpr.m_t_razm[4]
        painter.drawArc(rectangle, spanAngle-_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[4]); // арка скорости
        qDebug() << "spanAngle-_myTexpr.m_t_razm[4]" << spanAngle-_myTexpr.m_t_razm[4];
        qDebug() << "_myTexpr.m_t_razm[4]" << _myTexpr.m_t_razm[4];
    
        painter.setPen(pen_skor_pyst);                                                      // Устанавливаем кисть для линий и текста
        painter.drawArc(rectangle,-_myTexpr.m_t_razm[4] -spanAngle/2.66, -spanAngle+(_myTexpr.m_t_razm[4])); // арка скорости
    
    //    painter.rotate-41);
        // _myTexpr.m_t_razm[4], spanAngle-_myTexpr.m_t_razm[4]
    //    painter.drawArc(rectangle,-(spanAngle-_myTexpr.m_t_razm[4]), -_myTexpr.m_t_razm[4]);  // арка заплнения
    //    painter.drawArc(rectangle, (spanAngle-_myTexpr.m_t_razm[4])-_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[4]);  // арка заплнения
    //    painter.drawArc(rectangle,-_myTexpr.m_t_razm[4], spanAngle+_myTexpr.m_t_razm[4]);  // арка заплнения
    //    painter.drawArc(rectangle,0, -4000);                                       // арка заплнения
    
        //--------------------
    
    //    int startAngle = 0 * 16;
    //    int spanAngle =  221 * 16;
    
    
    //     painter.drawArc(rectangle, startAngle, spanAngle); // арка скорости
    
    
    //     painter.setPen(pen_skor_pyst);                     // Устанавливаем кисть для линий и текста
    
    
    //     startAngle = 0 * 16;
    //     spanAngle =  -41 * 16;
    
    //     painter.drawArc(rectangle, startAngle, spanAngle); // арка заполнения
        //----
    
    //     startAngle = 341 * 16;
    //     spanAngle =  0 * 16;
    
    //     painter.drawArc(rectangle, startAngle, spanAngle); // арка заполнения
    
        // это влияет ! 0_o
    //    painter.setRenderHint(QPainter::Antialiasing);
    //    painter.setRenderHint(QPainter::TextAntialiasing);
    //    painter.drawPixmap(0,0, _pix);
    
    
    }
    
    void spidometr_widget::keyPressEvent(QKeyEvent *event)
    {
        qDebug() << "_myTexpr.m_pitch: " << _myTexpr.m_t_razm[4];
    
        switch (event->key()) {
        case Qt::Key_Down:
            //            _myTexpr.m_pitch++;
            _myTexpr.m_t_razm[4] += 10.0;
            if(_myTexpr.m_t_razm[4] >= 4192)
                _myTexpr.m_t_razm[4] = 4192;
            break;
        case Qt::Key_Up:
            //            _myTexpr.m_pitch--;
            _myTexpr.m_t_razm[4] -= 10.0;
            if(_myTexpr.m_t_razm[4] <= 0)
                _myTexpr.m_t_razm[4] = 0;
            break;
    
        default:
            QWidget::keyPressEvent(event);
            break;
        }
        update();
    }
    
    void spidometr_widget::razmer_spidometr(int x, int y)
    {
        //   размер  линий
        float side = qMin(x, y);
    
    
        // _myTexpr.m_t_razm[0];               // ширина текстовой линии для ручки pen_skor_zap и pen_skor_pyst
        // _myTexpr.m_t_razm[1];               // ширина текстовой линии для ручки "резерв"
    
        _myTexpr.m_t_razm[2] = x/2.0;          // вырвнивание по центру Х
        _myTexpr.m_t_razm[3] = y/2.0;          // выравнивание по центру У
    
        // _myTexpr.m_t_razm[4];               // скорость
    
        _myTexpr.m_t_razm[5] = side;           // минимальный размер из х и у
        // _myTexpr.m_t_razm[6];               // предел спидометра задаётся в setSpidometr
    
        _myTexpr.razm_lin_b = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])* 3.1;       //высота линии
        _myTexpr.razm_lin_m = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])* 0.2;       //высота линии малой
        _myTexpr.razm_text  = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])* 0.4;       // высота текста
        //_myTexpr.razm_shrift = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])*0.25;      // ширина текста (шрифта)
         _myTexpr.m_t_razm[7] = side *0.085;                                              // ширина текста (шрифта)
         // _myTexpr.m_t_razm[8];                                                         // ширина строки
         _myTexpr.razm_shrift = side *0.085;                                              // ширина текста (шрифта)
    
    }
    
    
    
    void spidometr_widget::setSpidometr_value(float max_speed, QString nadp1,QString nadp2, QString nadp3 )
    {
    //    _myTexpr.m_t_razm[6] = speed/262.0;    // предел спидометра
        _myTexpr.speed_shag  = 4192/max_speed;
        if(max_speed <= 0)
        {
            _myTexpr.speed_shag = 4192/100;
        }
    
        // вот тут заглушки
        _myTexpr.nadp1 = nadp1;
        _myTexpr.nadp2 = nadp2;
        _myTexpr.nadp3 = nadp3;
    
        if (nadp1.isEmpty() == true)
        {
            _myTexpr.nadp1 = "0";
        }
        if (nadp2.isEmpty() == true)
        {
            _myTexpr.nadp2 = "КМ/Ч";
        }
        if(nadp3.isEmpty() == true)
        {
            _myTexpr.nadp3 = "скорость";
        }
    }
    

    my trye

    QPainterPath path;
        painter.strokePath(path, QPen(QColor(255, 0, 0, 250), 10));
    
    
        //  --------
    
        _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp1);               // узнаём ширину строки
        painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),      /* тут ввод текста */
                (_myTexpr.m_t_razm[3]-_myTexpr.m_t_razm[7]/2.0),
                _myTexpr.nadp1); // рисуем надпись
    
    M 1 Reply Last reply 16 Dec 2021, 14:44
    0
    • T timob256
      16 Dec 2021, 13:28

      I want to stroke the text, like this
      33.png

      how to create outlines in a function drawText() in classes QPainter ? ??

      my primer

      Screenshot_20211216_165308.png

      #include "spidometr_widget.h"
      #include <math.h>
      #include <QDebug>
      
      spidometr_widget::spidometr_widget(QWidget *parent)
          : QWidget(parent)
      {
      
          // #include <math.h> #include <QDebug>
          float a_t_pitch = 30.0;
           if((fmod(a_t_pitch, float(30))) == float(0.0))
           {
              qDebug() << "qwerrt";
           }
      
           //  обявление максимальная скорость
      //     setSpidometr(100, "QString nadp");
           setSpidometr_value(0, "", "", "");
      
       }
      
      spidometr_widget::~spidometr_widget()
      {
      
      }
      
      
      
      void spidometr_widget::paintEvent(QPaintEvent *event)
      {
          QPainter painter(this);                                         // Создаём объект отрисовщика
          QBrush bgfon(QColor(48,172,220),Qt::NoBrush);                   // устанавливаем цвет фона и тип заливки (с фоном без фона и тип заливки)
          QBrush maska(QColor(48,172,220,120),Qt::SolidPattern);              // для маски
          QPen pen_maska(Qt::NoPen);
          painter.setRenderHint(QPainter::Antialiasing);                  // убираем резкие кубики
      
      
      
          _myTexpr.m_t_razm[0] = 14;                                                        // выставляем размеры ширины линии
          QPen pen_skor_zap(Qt::green,  _myTexpr.m_t_razm[0], Qt::SolidLine, Qt::FlatCap);  // кисть для скорости
          QPen pen_skor_pyst(Qt::black, _myTexpr.m_t_razm[0], Qt::SolidLine, Qt::FlatCap);  // кисть для заполения (не скорости)
          painter.setBrush(bgfon);                                        // задаём цвет фона
          painter.setPen(pen_skor_zap);                                   // Устанавливаем кисть для линий и текста
      
      
      
      
          // блок чтоб не пересчитывать если размеры не изменились
          if( _myTexpr.razm_ekran_X != this->width())
          {
              _myTexpr.razm_ekran_X = this->width();
              _myTexpr.razm_ekran_Y = this->height();
              razmer_spidometr(this->width(), this->height());
      //        _myTexpr.svoistv_shrift("Areal", _myTexpr.m_t_razm[9], QFont::Light); // свойства шрифта
           }
          if(_myTexpr.razm_ekran_Y != this->height())
          {
              _myTexpr.razm_ekran_X = this->width();
              _myTexpr.razm_ekran_Y = this->height();
              razmer_spidometr(this->width(), this->height());
       //        _myTexpr.svoistv_shrift("Areal", _myTexpr.m_t_razm[9], QFont::Light); // свойства шрифта
           }
      
          //  тут обводы и маску задаём
      //    QRectF rectangle0(0,0,_myTexpr.m_t_razm[2] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0],
      //           _myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0]);
      
          QRectF rectangle0( _myTexpr.m_t_razm[2] - _myTexpr.m_t_razm[5]/2.0/*+_myTexpr.m_t_razm[0]*/,
                            _myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[5]/2.0/*+_myTexpr.m_t_razm[0]*/,
                  _myTexpr.m_t_razm[5]/*-_myTexpr.m_t_razm[0]*2*/, _myTexpr.m_t_razm[5]/*-_myTexpr.m_t_razm[0]*2*/); // задаём прямоугольник
          painter.setBrush(maska);                                        // задаём цвет фона
          painter.setPen(pen_maska);
          painter.drawRect(rectangle0);
          // вертаем назад
          painter.setBrush(bgfon);                                        // задаём цвет фона
          painter.setPen(pen_skor_zap);
      
      
      
      
          QRectF rectangle( _myTexpr.m_t_razm[2] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0],
                            _myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[5]/2.0+_myTexpr.m_t_razm[0],
                  _myTexpr.m_t_razm[5]-_myTexpr.m_t_razm[0]*2, _myTexpr.m_t_razm[5]-_myTexpr.m_t_razm[0]*2); // задаём прямоугольник через рамеры (размеры экрана минус ширина текста)
      
      
          QFont razm_shrift("Areal", _myTexpr.m_t_razm[7]*2.4, QFont::Light);         // свойства шрифта
          painter.setFont(razm_shrift);                                               // устанавливаем размер шрифта
          QFontMetrics stroka_razm = painter.fontMetrics();                           // метрика шрифта
      
      //    QString("$%1").arg(_myTexpr.m_t_razm[4]/_myTexpr.speed_shag)
      //    _myTexpr.m_t_razm[4] =_myTexpr.m_t_razm[4]/_myTexpr.speed_shag;
      
          _myTexpr.nadp1 = QString::number(_myTexpr.m_t_razm[4]/_myTexpr.speed_shag, 'f', 1); // переводим число в строку.
          _myTexpr.nadp1 = QString("%1").arg(_myTexpr.nadp1);
      
      //    QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect(this);
      
      //    effect->setOffset(-1, -1);
      //    effect->setColor(Qt::yellow);
      //    ui->label->setGraphicsEffect(effect);
      //    _myTexpr.nadp1.set
      
          // --------
      
          QPainterPath path;
      //	path.addText(x, y, font(), text());
      
      //	painter.fillPath(path, palette().windowText());
          painter.strokePath(path, QPen(QColor(255, 0, 0, 250), 10));
      
      
          //  --------
      
          _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp1);               // узнаём ширину строки
          painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),      /* тут ввод текста */
                  (_myTexpr.m_t_razm[3]-_myTexpr.m_t_razm[7]/2.0),
                  _myTexpr.nadp1); // рисуем надпись
      
      
              painter.strokePath(path, QPen(QColor(255, 0, 0, 255), 2));
      
          QFont razm_shrift1("Areal", _myTexpr.m_t_razm[7]*0.6, QFont::Light);    // свойства шрифта
          painter.setFont(razm_shrift1);                                          // устанавливаем размер шрифта
          stroka_razm = painter.fontMetrics();                                    // метрика шрифта
          _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp2);               // узнаём ширину строки
          painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),
                  (_myTexpr.m_t_razm[3]+_myTexpr.m_t_razm[5]/4.0-_myTexpr.m_t_razm[7]/2.0),
                  _myTexpr.nadp2); // рисуем надпись
      
      
      
          QFont razm_shrift2("Areal", _myTexpr.m_t_razm[7], QFont::Light);      // свойства шрифта
          painter.setFont(razm_shrift2);                                        // устанавливаем размер шрифта
          stroka_razm = painter.fontMetrics();                                  // метрика шрифта
          _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp3);             // узнаём ширину строки
          painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),
                  (_myTexpr.m_t_razm[3]+_myTexpr.m_t_razm[5]/2.0-_myTexpr.m_t_razm[7]/2.0),
                  _myTexpr.nadp3); // рисуем надпись
      
          //--
      
      //    float ass = _myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[7]/2.0;
      //    float ass1 = _myTexpr.m_t_razm[7];
      //    qDebug() << "ass" << ass << " _myTexpr.razm_ekran_X" << _myTexpr.razm_ekran_X;
      //    qDebug() << "ass1" << ass1 << " _myTexpr.m_t_razm[2]" << _myTexpr.m_t_razm[2];
      
      
      
          // тут заполнение рисую заполненную засть и не заполненную спидометр
      
          int startAngle = 0 * 16;
          int spanAngle =  262 * 16;
      
      //    painter.drawArc(rectangle, startAngle, spanAngle); // арка скорости
      
      
          painter.translate(this->width()/2.0, this->height()/2.0);
          painter.rotate(41);
          painter.translate( -this->width()/2.0, -this->height()/2.0);
      
      
          painter.setPen(pen_skor_zap);                                                     // Устанавливаем кисть для линий и текста
          // startAngle, _myTexpr.m_t_razm[4]
          painter.drawArc(rectangle, spanAngle-_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[4]); // арка скорости
          qDebug() << "spanAngle-_myTexpr.m_t_razm[4]" << spanAngle-_myTexpr.m_t_razm[4];
          qDebug() << "_myTexpr.m_t_razm[4]" << _myTexpr.m_t_razm[4];
      
          painter.setPen(pen_skor_pyst);                                                      // Устанавливаем кисть для линий и текста
          painter.drawArc(rectangle,-_myTexpr.m_t_razm[4] -spanAngle/2.66, -spanAngle+(_myTexpr.m_t_razm[4])); // арка скорости
      
      //    painter.rotate-41);
          // _myTexpr.m_t_razm[4], spanAngle-_myTexpr.m_t_razm[4]
      //    painter.drawArc(rectangle,-(spanAngle-_myTexpr.m_t_razm[4]), -_myTexpr.m_t_razm[4]);  // арка заплнения
      //    painter.drawArc(rectangle, (spanAngle-_myTexpr.m_t_razm[4])-_myTexpr.m_t_razm[4], _myTexpr.m_t_razm[4]);  // арка заплнения
      //    painter.drawArc(rectangle,-_myTexpr.m_t_razm[4], spanAngle+_myTexpr.m_t_razm[4]);  // арка заплнения
      //    painter.drawArc(rectangle,0, -4000);                                       // арка заплнения
      
          //--------------------
      
      //    int startAngle = 0 * 16;
      //    int spanAngle =  221 * 16;
      
      
      //     painter.drawArc(rectangle, startAngle, spanAngle); // арка скорости
      
      
      //     painter.setPen(pen_skor_pyst);                     // Устанавливаем кисть для линий и текста
      
      
      //     startAngle = 0 * 16;
      //     spanAngle =  -41 * 16;
      
      //     painter.drawArc(rectangle, startAngle, spanAngle); // арка заполнения
          //----
      
      //     startAngle = 341 * 16;
      //     spanAngle =  0 * 16;
      
      //     painter.drawArc(rectangle, startAngle, spanAngle); // арка заполнения
      
          // это влияет ! 0_o
      //    painter.setRenderHint(QPainter::Antialiasing);
      //    painter.setRenderHint(QPainter::TextAntialiasing);
      //    painter.drawPixmap(0,0, _pix);
      
      
      }
      
      void spidometr_widget::keyPressEvent(QKeyEvent *event)
      {
          qDebug() << "_myTexpr.m_pitch: " << _myTexpr.m_t_razm[4];
      
          switch (event->key()) {
          case Qt::Key_Down:
              //            _myTexpr.m_pitch++;
              _myTexpr.m_t_razm[4] += 10.0;
              if(_myTexpr.m_t_razm[4] >= 4192)
                  _myTexpr.m_t_razm[4] = 4192;
              break;
          case Qt::Key_Up:
              //            _myTexpr.m_pitch--;
              _myTexpr.m_t_razm[4] -= 10.0;
              if(_myTexpr.m_t_razm[4] <= 0)
                  _myTexpr.m_t_razm[4] = 0;
              break;
      
          default:
              QWidget::keyPressEvent(event);
              break;
          }
          update();
      }
      
      void spidometr_widget::razmer_spidometr(int x, int y)
      {
          //   размер  линий
          float side = qMin(x, y);
      
      
          // _myTexpr.m_t_razm[0];               // ширина текстовой линии для ручки pen_skor_zap и pen_skor_pyst
          // _myTexpr.m_t_razm[1];               // ширина текстовой линии для ручки "резерв"
      
          _myTexpr.m_t_razm[2] = x/2.0;          // вырвнивание по центру Х
          _myTexpr.m_t_razm[3] = y/2.0;          // выравнивание по центру У
      
          // _myTexpr.m_t_razm[4];               // скорость
      
          _myTexpr.m_t_razm[5] = side;           // минимальный размер из х и у
          // _myTexpr.m_t_razm[6];               // предел спидометра задаётся в setSpidometr
      
          _myTexpr.razm_lin_b = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])* 3.1;       //высота линии
          _myTexpr.razm_lin_m = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])* 0.2;       //высота линии малой
          _myTexpr.razm_text  = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])* 0.4;       // высота текста
          //_myTexpr.razm_shrift = (_myTexpr.m_t_razm[3] - _myTexpr.m_t_razm[2])*0.25;      // ширина текста (шрифта)
           _myTexpr.m_t_razm[7] = side *0.085;                                              // ширина текста (шрифта)
           // _myTexpr.m_t_razm[8];                                                         // ширина строки
           _myTexpr.razm_shrift = side *0.085;                                              // ширина текста (шрифта)
      
      }
      
      
      
      void spidometr_widget::setSpidometr_value(float max_speed, QString nadp1,QString nadp2, QString nadp3 )
      {
      //    _myTexpr.m_t_razm[6] = speed/262.0;    // предел спидометра
          _myTexpr.speed_shag  = 4192/max_speed;
          if(max_speed <= 0)
          {
              _myTexpr.speed_shag = 4192/100;
          }
      
          // вот тут заглушки
          _myTexpr.nadp1 = nadp1;
          _myTexpr.nadp2 = nadp2;
          _myTexpr.nadp3 = nadp3;
      
          if (nadp1.isEmpty() == true)
          {
              _myTexpr.nadp1 = "0";
          }
          if (nadp2.isEmpty() == true)
          {
              _myTexpr.nadp2 = "КМ/Ч";
          }
          if(nadp3.isEmpty() == true)
          {
              _myTexpr.nadp3 = "скорость";
          }
      }
      

      my trye

      QPainterPath path;
          painter.strokePath(path, QPen(QColor(255, 0, 0, 250), 10));
      
      
          //  --------
      
          _myTexpr.m_t_razm[8] = stroka_razm.width(_myTexpr.nadp1);               // узнаём ширину строки
          painter.drawText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),      /* тут ввод текста */
                  (_myTexpr.m_t_razm[3]-_myTexpr.m_t_razm[7]/2.0),
                  _myTexpr.nadp1); // рисуем надпись
      
      M Offline
      M Offline
      mpergand
      wrote on 16 Dec 2021, 14:44 last edited by mpergand
      #2

      @timob256

      QPainterPath path;
      // path.addText(x, y, font(), text());
      // painter.fillPath(path, palette().windowText());
      painter.strokePath(path, QPen(QColor(255, 0, 0, 250), 10));

      QPainterPath::addText is the way to go:

      QFont font=this->font();
      font.setBold(true);
      font.setPixelSize(50);
      path.addText(x,y,font, "33");
      QPen pen(Qt::darkGray);
      pen.setWidthF(font.pixelSize()/20.0);
      painter.strokePath(path,pen);
      
      1 Reply Last reply
      3
      • T Offline
        T Offline
        timob256
        wrote on 16 Dec 2021, 16:12 last edited by
        #3

        @mpergand tsanks

        but my brain wery smal ;_;

        ```
        

        QFont razm_shrift("Areal", _myTexpr.m_t_razm[7]*2.4, QFont::Light); // свойства шрифта
        painter.setFont(razm_shrift); // устанавливаем размер шрифта
        QFontMetrics stroka_razm = painter.fontMetrics(); // метрика шрифта

        _myTexpr.nadp1 = QString::number(_myTexpr.m_t_razm[4]/_myTexpr.speed_shag, 'f', 1); // переводим число в строку.
        _myTexpr.nadp1 = QString("%1").arg(_myTexpr.nadp1);
        
        QPainterPath path;
        

        // QFont font=this->font();
        // razm_shrift.setBold(true);
        // razm_shrift.setPixelSize(100);

        path.addText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),      /* тут ввод текста */
                (_myTexpr.m_t_razm[3]-_myTexpr.m_t_razm[7]/2.0),  razm_shrift, _myTexpr.nadp1);
        QPen pen(Qt::darkGray);
        

        // pen.setWidthF(razm_shrift.pixelSize()/20.0);
        painter.strokePath(path, pen);

        
        so far only got this result 
        
        
        cannot align the bypass line with the inner line
        
        
        ![Screenshot_20211216_190907.png](https://ddgobkiprc33d.cloudfront.net/483d2c5b-27f0-493c-862d-c3c2a55d3cf3.png) 
        
        
        ![alt text](https://ddgobkiprc33d.cloudfront.net/483d2c5b-27f0-493c-862d-c3c2a55d3cf3.png)
        M 1 Reply Last reply 16 Dec 2021, 16:45
        0
        • T timob256
          16 Dec 2021, 16:12

          @mpergand tsanks

          but my brain wery smal ;_;

          ```
          

          QFont razm_shrift("Areal", _myTexpr.m_t_razm[7]*2.4, QFont::Light); // свойства шрифта
          painter.setFont(razm_shrift); // устанавливаем размер шрифта
          QFontMetrics stroka_razm = painter.fontMetrics(); // метрика шрифта

          _myTexpr.nadp1 = QString::number(_myTexpr.m_t_razm[4]/_myTexpr.speed_shag, 'f', 1); // переводим число в строку.
          _myTexpr.nadp1 = QString("%1").arg(_myTexpr.nadp1);
          
          QPainterPath path;
          

          // QFont font=this->font();
          // razm_shrift.setBold(true);
          // razm_shrift.setPixelSize(100);

          path.addText((_myTexpr.m_t_razm[2]-_myTexpr.m_t_razm[8]/2.0),      /* тут ввод текста */
                  (_myTexpr.m_t_razm[3]-_myTexpr.m_t_razm[7]/2.0),  razm_shrift, _myTexpr.nadp1);
          QPen pen(Qt::darkGray);
          

          // pen.setWidthF(razm_shrift.pixelSize()/20.0);
          painter.strokePath(path, pen);

          
          so far only got this result 
          
          
          cannot align the bypass line with the inner line
          
          
          ![Screenshot_20211216_190907.png](https://ddgobkiprc33d.cloudfront.net/483d2c5b-27f0-493c-862d-c3c2a55d3cf3.png) 
          
          
          ![alt text](https://ddgobkiprc33d.cloudfront.net/483d2c5b-27f0-493c-862d-c3c2a55d3cf3.png)
          M Offline
          M Offline
          mpergand
          wrote on 16 Dec 2021, 16:45 last edited by
          #4

          @timob256 said in Is stroke the text (Circle text ):

          cannot align the bypass line with the inner line

          Sorry, i don't understand.

          If you want the background to be green, add a fillPath before stroke path:

          painter.fillPath(path,Qt::green);
          painter.strokePath(path,pen);
          
          1 Reply Last reply
          1

          2/4

          16 Dec 2021, 14:44

          • Login

          • Login or register to search.
          2 out of 4
          • First post
            2/4
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved