какой аналог QPainter rotate есть в QPainterPath?

Ни как немогу найти аналог QPainter rotate в классе QPainterPath

if(_myTexpr.outline == true)
        {
            path2.translate(_myTexpr.screen_size_x/2.0, _myTexpr.screen_size_y/2.0);
            path2.rotate(); // вот тут выдаёт ошибку 
            path2.translate(-_myTexpr.screen_size_x/2.0, -_myTexpr.screen_size_y/2.0);
            
        }
        painter.translate(this->width()/2.0, this->height()/2.0);
        painter.rotate(_myTexpr.m_pitch);
        painter.translate(- this->width()/2.0, - this->height()/2.0);

Ответы (1 шт):

Автор решения: timob256
void Cran::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);                                     // Создаём объект отрисовщика

    QBrush bgfon(QColor(48,172,220),Qt::NoBrush);               // устанавливаем цвет фона и тип заливки (с фоном без фона и тип заливки)
    painter.setRenderHint(QPainter::Antialiasing);              // убираем резкие кубики

    QPen pen_osn(Qt::black, 2, Qt::SolidLine, Qt::FlatCap);     // кисть  для основного тела
    QPen pen_bashn(Qt::black, 4, Qt::SolidLine, Qt::FlatCap);   // кисть для башни

    painter.setBrush(bgfon);                                    // задаём цвет фона
    painter.setPen(pen_osn);                                    // Устанавливаем кисть для линий и текста

    QPainterPath path;                              // ресуем основные элементы
    QPainterPath path2;                             // обводы  элемент обводов
    QPen pen2(Qt::darkGray);                        // обводы  элемент обводов заменить на выборочный цвет
    pen2.setWidthF(_myTexpr.size_mask);             // обводы  размер

    painter.setRenderHint(QPainter::Antialiasing);  // убираем резкие кубики



    // блок чтоб не пересчитывать если размеры не изменились
    if( _myTexpr.screen_size_x != this->width())
    {
        _myTexpr.screen_size_x = this->width();
        _myTexpr.screen_size_y = this->height();
        size_wgt_cran(this->width(), this->height());
    }
    if(_myTexpr.screen_size_y != this->height())
    {
        _myTexpr.screen_size_x = this->width();
        _myTexpr.screen_size_y = this->height();
        size_wgt_cran(this->width(), this->height());
    }


    // ---------рисуем фон ------------
    if(_myTexpr.substrate == true)
    {
        qDebug() << "1";
        //            bgfon.setColor(Qt::red);
        painter.setBrush(_myTexpr.rgb);
        painter.drawRect( 0, 0, _myTexpr.screen_size_x, _myTexpr.screen_size_y);                         // рисуем квадрат
    }
    if(_myTexpr.substrate == false)
    {
        qDebug() << "2";
        painter.setBrush(_myTexpr.rgb);
        painter.drawRect( 0, 0, _myTexpr.screen_size_x, _myTexpr.screen_size_y);
    }

    // ---------рисуем корпус------------
    // обводы
    if(_myTexpr.outline == true)
    {
        path2.addRect(_myTexpr.centering_by_x+_myTexpr.cran_height/2.1,
                      _myTexpr.centering_by_y+_myTexpr.cran_width/2.1,
                      _myTexpr.cran_width, _myTexpr.cran_height);
        painter.strokePath(path2, pen2);  // обводы  элемент обводов
        painter.drawPath(path2);
    }

    path.addRect( _myTexpr.centering_by_x+_myTexpr.cran_height/2.1,
                  _myTexpr.centering_by_y+_myTexpr.cran_width/2.1,
                  _myTexpr.cran_width, _myTexpr.cran_height ) ;
    painter.drawPath(path);

    // очищаем эту хрень
    path.clear();
    path2.clear();

    // центрирование, поворот, возвращаем центрирование
    painter.translate(this->width()/2.0, this->height()/2.0);
    painter.rotate(_myTexpr.m_pitch);
    painter.translate(-this->width()/2.0, -this->height()/2.0);
    if(_myTexpr.outline == true)
    {
        path2.addRect( _myTexpr.centering_by_x+_myTexpr.cran_height/1.2,
                      _myTexpr.centering_by_y+_myTexpr.cran_width/4.1,
                      _myTexpr.cran_width/5, _myTexpr.cran_height/1.5 ) ;
        painter.strokePath(path2, pen2);  // обводы  элемент обводов
        painter.drawPath(path2);
    }

    path.addRect( _myTexpr.centering_by_x+_myTexpr.cran_height/1.2,
                  _myTexpr.centering_by_y+_myTexpr.cran_width/4.1,
                  _myTexpr.cran_width/5, _myTexpr.cran_height/1.5 ) ;
    painter.drawPath(path);
}

Надо было очистить path path2

path.clear();
path2.clear();

Снимок экрана от 2022-03-16 13-00-31.png

→ Ссылка