Qt 5.5 рисует заполненный пирог

Изображение ниже показывает серый пирог, я хотел бы нарисовать это с помощью Qt 5.5

X увеличивается слева направо Y увеличивается сверху вниз

У меня есть начальный угол и конечный угол, который соответствует верхней и нижней части дуги. Я рассчитываю угол дуги, используя:

double dblArcAngle = fmod(mcfltElevMaxLimit - mcfltElevMinLimit + 180.0, 360.0) - 180.0;

Куда:

mcfltElevMaxLimit is 60 and mcfltElevMinLimit is -10

Вызов drawPie выглядит следующим образом:

objOffscrPainter.drawPie(QRect(rctGeom.left() + mcintElevLeftMargin
                               ,rctGeom.top() + mcintElevBottomMargin
                               ,rctGeom.width() - mcintElevLeftMargin
                               ,rctGeom.height() - mcintElevBottomMargin)
                               ,mcfltElevMaxLimit * 16, dblArcAngle * 16);

Я получаю очень маленькую ломаную линию примерно посередине, где должен быть пирог.

(отредактируйте), просто прочитайте в документации, что оба параметра startAngle и spanAngle 2 и 3 должны быть умножены на 16, что создает круговую диаграмму, не в правильной ориентации и не заполненную по центру, а по ее ходу.

(правка 2), больше прогресса, изображение ниже теперь показывает результаты, которые я получаю, прямоугольник, который я передаю, является внешним прямоугольником и включает ось, но по какой-то причине круговая диаграмма смещена???

То, что я хочу сделать, это пирог, заправленный в нижний левый угол, выровненный по белой оси и заполняющий изображение.

Похоже, что пропущенный прямоугольник используется для определения центральной точки пирога. Если это правильно, то центр прямоугольника должен быть отрегулирован так, чтобы он был началом координат (внизу слева), а также размер был отрегулирован для заполнения дисплея.

1 ответ

Решение

Прямоугольник в первом параметре QPainter::drawPie является ограничительной рамкой круга, который содержит вашу дугу. Итак, чтобы нарисовать то, что вам нужно, попробуйте что-то вроде этого:

objOffscrPainter.drawPie(QRect(center.x() - r, center.y() - r, 2 * r, 2 * r)
    ,16*mcfltElevMaxLimit, 16*dblArcAngle);

(где center это центр твоей дуги)

Похоже, что в вашем случае center это QPoint(0, 0), так что вы можете использовать этот код:

objOffscrPainter.drawPie(-r, -r, 2*r, 2*r, 16*mcfltElevMaxLimit, 16*dblArcAngle);

(мы можем позвонить и без QRect, см. документацию)

Другие вопросы по тегам