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, см. документацию)